使用sed从多个文件替换文件路径名

时间:2018-07-24 05:25:38

标签: bash sed cygwin

我想在多个文件中用空值替换<lexicon uri="file://C:/image/png/grammars/custom/image-custom.lex?SWI.type=backup"/><lexicon uri="file://C:/image/jpg/grammars/custom/image-dot-custom.lex?SWI.type=backup"/>

下面给出了代码。

sed -i s|<lexicon uri="file://C:/image/png/grammars/custom/image-custom.lex?SWI.type=backup"/><lexicon uri="file://C:/image/jpg/grammars/custom/image-dot-custom.lex?SWI.type=backup"/>||g *

我在这里遇到此错误:

< was unexpected at this time.

请为我澄清在这里行不通的情况。

3 个答案:

答案 0 :(得分:2)

能否请您尝试以下操作,如果有帮助,请告诉我。通过将#用作sed的分隔符,您无需转义/,而只需要转义.?而不具有特殊含义< / p>

sed -E 's#<lexicon uri="file://C:/image/png/grammars/custom/image-custom\.lex\?SWI\.type=backup"/><lexicon uri="file://C:/image/jpg/grammars/custom/image-dot-custom\.lex\?SWI\.type=backup"/>##' Input_file

使用以下方法进行了测试:

sed --version
GNU sed version 4.2.1

答案 1 :(得分:2)

#合作
sed -i -e 's#<lexicon uri="file://C:/image/png/grammars/custom/image-custom.lex?SWI.type=backup"/><lexicon uri="file://C:/image/jpg/grammars/custom/image-dot-custom.lex?SWI.type=backup"/>##g' test.txt

答案 2 :(得分:1)

该模式包含shell元字符,需要将其引号或转义。通常,在Bash中,应该在字符串周围使用单引号,除非需要外壳来插值变量和命令替换并解释反斜杠序列(在这种情况下使用双引号),或者还执行空格标记化和通配符扩展(在这种情况下使用没有引号)。另请参见When to wrap quotes around a shell variable?

sed -i 's|<lexicon uri="file://C:/image/png/grammars/custom/image-custom.lex?SWI.type=backup"/><lexicon uri="file://C:/image/jpg/grammars/custom/image-dot-custom.lex?SWI.type=backup"/>||' *

我还取出了g标志,这仅在您期望一行中有多个匹配项时才有意义。 (也许您毕竟做了,在这种情况下,显然要把它放回去。)