【问题标题】:sed: -e expression #1, char 23: unknown option to `s' [duplicate]sed:-e 表达式 #1,字符 23:“s”的未知选项 [重复]
【发布时间】:2014-04-06 14:01:03
【问题描述】:

我正在尝试使用 sed 通过 bash 脚本更新配置文件。在运行良好的脚本中,我在此命令上方有一个类似的 sed 命令。我似乎无法弄清楚为什么会这样:

sed -i.bak \
    -e s/"socketPath:'https://localhost:9091'"/"socketPath:'/socket'"/g \
    $WEB_CONF

有什么想法吗?

【问题讨论】:

  • 另一种解决方法是转义斜杠,即 https:\/\/localhost:9091

标签: sed


【解决方案1】:

我对你使用的分隔符感到困惑,所以你不能责怪sed 搞砸了。当您的数据集包含/ 时,通常建议使用不同的分隔符,例如#_(是的,sed 支持各种分隔符)。

另外,你的引用看起来有点不对劲。语法应该是:

sed -i.bak 's#substitute#replacement#g' "$WEB_CONF"

如果您的替代品和/或替代品有变量,请使用" 而不是',这将允许它进行插值。

【讨论】:

    【解决方案2】:

    转义模式中的斜线或使用不同的分隔符,如下所示:

    sed -i.bak \
    -e s%"socketPath:'https://localhost:9091'"%"socketPath:'/socket'"%g \
    $WEB_CONF
    

    【讨论】:

      【解决方案3】:

      引号和双引号引起了问题。 鉴于字符串中的斜线,您正在使用它们。 在 sed 中,您可以使用另一个分隔符,例如 #。

      sed -e 's#socketPath:https://localhost:9091#socketPath:/socket#g' \
      $WEB_CONF
      

      【讨论】:

        猜你喜欢
        • 2020-11-25
        • 2018-04-25
        • 2022-12-28
        • 1970-01-01
        • 2013-03-08
        • 2021-02-07
        • 2018-03-11
        • 2016-08-16
        • 2019-03-17
        相关资源
        最近更新 更多