【问题标题】:How to escape the ampersand character while using sed如何在使用 sed 时转义 & 字符
【发布时间】:2012-07-03 16:46:19
【问题描述】:

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

【问题讨论】:

    标签: shell unix sed


    【解决方案1】:

    它对我有用

    bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g"
    ''This is a string with ''single quote'' & ''&''
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 嘿,我想在我的输出字符串中用& 替换一个字符串。我根据网上的不同答案尝试了"&"\&\\&\\\&"'\&'",但没有任何效果,有什么建议吗?
      • \& 为我工作。例如,我可以使用sed "s/amp/\&/g"amp 的所有实例替换为&。如果您仍然遇到问题,您应该使用您的输入字符串和代码发布一个新问题。
      • 是的。我正在使用另一个没有更改的文件:(
      【解决方案3】:

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

      $ 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 2014-06-14
        • 2011-11-17
        • 2015-01-17
        相关资源
        最近更新 更多