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

use*_*636 9 unix shell sed

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

Lev*_*sky 17

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

$ echo "123 ' foo & b'ar" | sed "s/'/''/g"
123 '' foo & b''ar
Run Code Online (Sandbox Code Playgroud)

但是,在s命令的'替换'部分&有一个特殊含义:它意味着'匹配'.这就是为什么上面的命令可以重写为:

$ echo "123 ' foo & b'ar" | sed "s/'/&&/g"
123 '' foo & b''ar
Run Code Online (Sandbox Code Playgroud)

\如果需要,可以像其他需要转义的内容一样逃脱它:

$ echo "123 ' foo & b'ar" | sed "s/'/'\&'/g"
123 '&' foo & b'&'ar
Run Code Online (Sandbox Code Playgroud)


Dar*_*tle 6

如果你发布你的代码会更容易回答,但我猜你没有逃脱&符号.更改&\&,如果你要一个文字符号.

如果您感到好奇,请参阅sed常见问题解答的第3.1.2节以获得更详细的解释.

  • 嗨,我想在输出字符串中用`&`替换一个字符串。我已经根据网络上的不同答案尝试过““&”`,`\&`,`\\&`,`\\\&`,`“'\&'”`,但是没有用,有什么建议吗? (2认同)
  • `\&` 对我有用。例如,我可以使用 `sed "s/amp/\&/g"` 将 `amp` 的所有实例替换为 `&`。如果您仍然遇到问题,您应该使用您的输入字符串和您的代码发布一个新问题。 (2认同)