我正在尝试使用sed使用bash脚本更新配置文件。我在脚本运行正常的上面有一个类似的sed命令。我似乎无法弄清楚为什么会这样:
sed -i.bak \
-e s/"socketPath:'https://localhost:9091'"/"socketPath:'/socket'"/g \
$WEB_CONF
有什么想法吗?
答案 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"
如果您的替换和/或替换有变量,请使用"
代替'
,这样就可以进行插值。