sed:-e expression#1,char 23:`s'的未知选项

时间:2014-03-04 20:15:54

标签: sed

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分:15)

引号和双引号导致问题。 您正在使用它们来查看字符串中的斜杠。 在sed中,您可以使用其他分隔符,例如#。

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

答案 1 :(得分:4)

在模式中逃避斜线或使用不同的分隔符:

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

答案 2 :(得分:1)

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

此外,你的报价看起来很高兴。语法应为:

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

如果您的替换和/或替换有变量,请使用"代替',这样就可以进行插值。