【发布时间】:2012-07-03 16:46:19
【问题描述】:
我想使用 sed 将字符串中的所有单引号替换为两个单引号。但是当字符串包含& 字符时,sed 命令不会替换之后出现的单引号。如何转义 & 字符以使其后面的单引号仍被替换?
【问题讨论】:
我想使用 sed 将字符串中的所有单引号替换为两个单引号。但是当字符串包含& 字符时,sed 命令不会替换之后出现的单引号。如何转义 & 字符以使其后面的单引号仍被替换?
【问题讨论】:
它对我有用
bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g"
''This is a string with ''single quote'' & ''&''
【讨论】:
如果您发布代码会更容易回答,但我猜您并没有转义与号。如果您想要文字 & 符号,请将 & 更改为 \&。
如果您好奇,请参阅The sed FAQ 的第 3.1.2 节以获得更详细的解释。
【讨论】:
& 替换一个字符串。我根据网上的不同答案尝试了"&"、\&、\\&、\\\&、"'\&'",但没有任何效果,有什么建议吗?
\& 为我工作。例如,我可以使用sed "s/amp/\&/g" 将amp 的所有实例替换为&。如果您仍然遇到问题,您应该使用您的输入字符串和代码发布一个新问题。
您不需要转义输入中的任何内容:
$ 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
【讨论】: