【问题标题】:How to replace string by another string when they include appostrophes?当字符串包含撇号时如何用另一个字符串替换字符串?
【发布时间】:2021-07-10 17:56:30
【问题描述】:
sed -i 's/cfg._sections['styles']/t(cfg._sections['styles'])/g' *

我试过",但没有用。

【问题讨论】:

  • 双引号确实可以正确修复撇号,但您没有意识到,因为方括号还有一个额外的问题,必须同时修复才能看到任何效果。专业提示:一次解决一个问题要容易得多,所以总是在你能想到的最小的例子上尝试一下,比如echo "a 'b' c" | sed "s/'/X/g"

标签: regex string bash sed escaping


【解决方案1】:

这可能对你有用(GNU sed):

sed -i 's/cfg\._sections\['\''styles'\''\]/t(&)/g' file

用单引号将 sed 命令括起来。

正则表达式 LHS 上的 .[] 代表任何字符,字符类的打开和关闭参见 here,因此必须通过前置 \ 进行转义/引用。

习语'\'' 可用于插入',这会关闭开头',并在shell 级别引入'(再次转义/引用),然后是另一个开头'

正则表达式的 RHS 中的 & 表示正则表达式的 LHS 捕获的内容。

注意术语 LHS 和 RHS 分别代表左侧和右侧 (s/LHS/RHS/)。

【讨论】:

    【解决方案2】:

    我建议在正则表达式中转义特殊字符 []

    sed -i "s/cfg._sections\['styles'\]/t(cfg._sections\['styles'\])/g" *
    

    如果您的输入包含.,则也先转义.

    【讨论】:

      猜你喜欢
      • 2017-06-16
      • 2019-05-14
      • 1970-01-01
      • 2021-01-25
      • 2013-12-03
      • 2021-08-19
      • 2017-01-28
      • 2017-03-07
      相关资源
      最近更新 更多