我想在多个文件中用空值替换<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.
请为我澄清在这里行不通的情况。
答案 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
标志,这仅在您期望一行中有多个匹配项时才有意义。 (也许您毕竟做了,在这种情况下,显然要把它放回去。)