【问题标题】:Escape single and double quote using sed. geed, find, xargs使用 sed 转义单引号和双引号。 geed,查找,xargs
【发布时间】:2013-02-24 13:10:21
【问题描述】:

我有一个类似这个的命令:

find ./ -type f | xargs gsed -i -r 's/[$][A-Za-z_\'"]/testing

我想让这个命令起作用。不幸的是,单引号和双引号会破坏命令。如何转义这些字符串并让这个命令起作用?

这个问题与这个one 不同,因为我在 [ 中有一个单引号。但如果稍微修改一下就能解决问题,我想知道。

我用@、#、\尝试了几种不同的方法,但还没有成功。

【问题讨论】:

    标签: regex replace sed escaping


    【解决方案1】:

    或者您可以尝试将 sed 脚本放在双引号中并转义需要转义的内容

    gsed -i -r "s/[$][A-Za-z_'\"]/testing/" 
    

    【讨论】:

      【解决方案2】:

      看看这个:

      kent$  cat file
      ''''''
      """"""
      
      kent$  sed 's/\x27/single /g;s/\x22/double /g' file
      single single single single single single 
      double double double double double double 
      

      所以,把你的 cmd 改成:

      find ./ -type f | xargs gsed -i -r 's/[$][A-Za-z_\x22\x27]/testing'
      

      注意我没有检查您的 find/xargs 部分是否正常,仅用于单引号/双引号部分。

      【讨论】:

      • 这对我不起作用(没有错误,但没有任何替代)。我在 Mac 上。
      • @rrr 你的是bsd sed。你没有-i 选项。阅读就地 sub 的手册页。
      【解决方案3】:

      您不能在单引号中使用单引号。你可以:

      1. 结束单引号,然后使用反斜杠引号:'...'\'

      2. 结束单引号,然后在双引号中使用单引号:'...'"'"

      【讨论】:

      • 3.使用不同的引号类型来包装表达式,而不是您要替换的引号类型。 (即在双引号中使用单引号)。如果用双引号括起来:sed "s/'/bla/" 单引号 ' 将替换为 bla,无需转义。 (我在 Mac 上)
      • @rrr:双引号可能需要添加更多反斜杠,因为它们可能会开始扩展一些子字符串。
      猜你喜欢
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 2011-06-13
      • 2013-06-30
      • 1970-01-01
      • 2013-08-09
      相关资源
      最近更新 更多