如何在使用sed时逃避&符号

时间:2012-07-03 09:08:40

标签: shell unix sed

我想用sed用两个单引号替换字符串中的所有单引号。但是当字符串包含&字符时,sed命令不会替换之后出现的单引号。如何逃避&字符,以便后面的单引号仍被替换?

3 个答案:

答案 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'' & ''&''