我想用sed用两个单引号替换字符串中的所有单引号。但是当字符串包含&
字符时,sed命令不会替换之后出现的单引号。如何逃避&
字符,以便后面的单引号仍被替换?
答案 0 :(得分:17)
您无需转义输入中的任何:
$ echo "123 ' foo & b'ar" | sed "s/'/''/g"
123 '' foo & b''ar
但是,s
命令&
的'替换'部分有一个特殊含义:它表示'匹配'。这就是为什么上面的命令可以重写为:
$ echo "123 ' foo & b'ar" | sed "s/'/&&/g"
123 '' foo & b''ar
如果需要,请使用\
以及其他需要转义的内容进行转义:
$ echo "123 ' foo & b'ar" | sed "s/'/'\&'/g"
123 '&' foo & b'&'ar
答案 1 :(得分:6)
如果你发布你的代码会更容易回答,但我猜你没有逃脱&符号。如果您想要文字&符号,请将&
更改为\&
。
如果您感到好奇,请参阅The sed FAQ的第3.1.2节以获取更详细的解释。
答案 2 :(得分:0)
这对我有用
bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g"
''This is a string with ''single quote'' & ''&''