我已经成功地替换了1个xml文件。但是,从test1.xml
到test30.xml
,我有10条路径,它们在最后有不同的路径:
test1.xml
. <样例路径=‘/test/test 123/st1.txt’> .test2.xml
. <样例路径=‘/test/test 123/te2.txt’> .等到
test30.xml
. <样例路径=‘/test/test 123/ .输出应该如下所示:
..。
<示例路径=‘/test/test 123/’>
..。
以前,我使用过这个,它可以更改一个文件。
sed -i "s#<example path='/test/test123/st1.txt'/>#<example path=/test/test123/>#" test1.xml
但是,我想一次更改多个文件,并执行以下脚本,但在cat
上xml文件没有显示更改。
sed -i "s#<example path='/test/test123/*.txt'/>#<example path='/test/test123/'>#" *.xml
任何帮助都将不胜感激。耽误您时间,实在对不起!
发布于 2020-09-18 05:45:13
造成此问题的原因是您使用了"shell glob“(即”通配符“)模式,其中需要正则表达式模式。
/test/test123/*.txt
部分实际上的意思是"/test/test123
,后面是零或多个/
字符,后面是任何单个字符,后面是txt
“。
这种模式不是您想要的,也不是您的文件中的任何地方。
相反,您需要的是/test/test123/[^.]*\.txt
,意思是"/test/test123/
,后面跟着许多不是.
的字符(请参阅“贪心正则表达式”说明为什么这是必要的),后面跟着文字.
,后面跟着txt
“。
然后,完整的命令看起来就像
sed -i "s#<example path='/test/test123/[^.]*\.txt'/>#<example path='/test/test123/'>#" *.xml
如果您的文件名除了.
扩展之外还可以包含.txt
,那么上面的文件名将不能正常工作。在这种情况下,使用
sed -i "s#<example path='/test/test123/.*\.txt'/>#<example path='/test/test123/'>#" *.xml
意思是"/test/test123/
,后面跟着任何类型的零或多个字符,后面跟着文字.
,后面跟着txt
“。这将正确工作,除非.txt
模式可以在稍后的行中再次出现(对于您的输入不应该是这样)。
发布于 2020-09-18 06:06:42
sed -i "s#<example path='/test/test123/.*\.txt'/>#<example path='/test/test123/'>#" *.xml
这解决了我的问题。干杯!:)
https://unix.stackexchange.com/questions/610057
复制相似问题