【问题标题】:How to match double and single quotes at the same time with the sed command?如何使用 sed 命令同时匹配双引号和单引号?
【发布时间】:2020-05-08 03:09:28
【问题描述】:

我想用一个字符串变量来改变一个字符串。字符串由'"+a+"' 组成(这正是字符串,没有添加额外的引号。例如字符串"foo" 和字符串foo 我的示例是第二个foo

是否可以使用sed 命令更改它?

我想用一个变量替换它。我试过这个:

sed "s#'"+a+"'#${var}#" 
sed "s#'\"+a+\"'#${var}#" 
sed "s#'[\"]+a+[\"]'#${var}#"

感谢您的任何回答!

【问题讨论】:

    标签: bash sed quotes


    【解决方案1】:

    也许也可以使用变量进行搜索。

    var=_FOO_
    search=$'\'"+a+"\''
    
    echo "mama${search}papa" | sed  "s#${search}#${var}#"
    

    输出

    mama_FOO_papa
    

    $' ' 是 bash 风格的引用。

    search=$'\'"+a+"\'';  echo "$search"
    

    输出

    '"+a+"'
    

    【讨论】:

    • 您不需要在此处引用$' '(可以使用,但不是唯一的方法)。例如search="'\"+a+\"'" 具有相同的效果。
    • 嵌套引用真的很重要,是的,有更多方法可以解决这个问题。
    【解决方案2】:

    您的 sed 表达式中有错字 - 您在 a 之后缺少第二个 + 符号 :)

    $ var=" else "
    $ echo "something'\"+a+\"'cool" | sed "s#'\"+a+\"'#${var}#"
    something else cool
    

    【讨论】:

    • @luis 只是为了清楚一点,您不需要像您接受的答案那样的额外变量。如果您添加缺少的+,则您在问题中使用的模式有效。
    • 哦,你是对的! .我想很难看到一行中有这么多符号的错别字。实际上有时使用括号可能不是坏主意哈哈。
    【解决方案3】:

    可以使用 BSD sed(例如 macOS):sed "s/\'\"\+\a\+\"\'/$var/g"

    这很丑,但它有效(GNU sed):sed "s/[\'][\"][\+]a[\+][\"][\']/$var/g"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 2015-02-07
      • 1970-01-01
      相关资源
      最近更新 更多