sed:-e表达式#1,字符23:s'的未知选项;

sed:-e表达式#1,字符23:s'的未知选项;,sed,Sed,我正在尝试使用sed使用bash脚本更新配置文件。在脚本中,我有一个类似的sed命令,在这个命令的正上方运行良好。我似乎不明白为什么会这样: sed -i.bak \ -e s/"socketPath:'https://localhost:9091'"/"socketPath:'/socket'"/g \ $WEB_CONF 有什么想法吗?我看不清您使用的分隔符,所以您不能责怪sed搞砸了。当数据集中包含/时,通常建议使用不同的分隔符,如或(是的,sed支持各种分隔符) 而且,

我正在尝试使用sed使用bash脚本更新配置文件。在脚本中,我有一个类似的sed命令,在这个命令的正上方运行良好。我似乎不明白为什么会这样:

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

有什么想法吗?

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

而且,你的报价看起来有点不对劲。语法应为:

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

如果替换和/或替换具有变量,则使用
代替
,这将允许它进行插值。

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

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

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


另一种修复方法是避开斜杠,即https:\/\/localhost:9091
sed -e 's#socketPath:https://localhost:9091#socketPath:/socket#g' \
$WEB_CONF