15

我想使用 sed 用两个单引号替换字符串中的所有单引号。但是当字符串包含&字符时,sed 命令不会替换之后的单引号。如何转义&字符以便仍然替换它之后的单引号?

4

3 回答 3

27

您不需要转义输入中的任何内容:

$ 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
于 2012-07-03T09:13:49.590 回答
12

如果您发布代码会更容易回答,但我猜您并没有转义与号。如果您想要文字 & 符号,请更改&为。\&

如果您好奇,请参阅sed FAQ的第 3.1.2 节以获得更详细的解释。

于 2012-07-03T09:14:18.840 回答
0

它对我有用

bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g"
''This is a string with ''single quote'' & ''&''
于 2012-07-03T12:01:56.443 回答