正确的sed变量语法

时间:2019-05-27 19:55:29

标签: bash sed

在bash脚本中运行sed时出现语法错误。这里没有类似的问题解决了我的问题。

我需要为VPN连接更新配置中的一行。

serverconfig='vpnsrv.tcp.ovpn'
auth='auth-user-pass'
update='../login.conf'

sed -i.bak "s/$auth/$update" $serverconfig

# I have also tried these:
#sed -i.bak 's/auth-user-pass/auth-user-pass "${update}"' $serverconfig
#sed -i.bak 's/auth-user-pass/auth-user-pass '"${update}"'' $serverconfig
#sed -i.bak 's/auth-user-pass/auth-user-pass\ "${update}"' $serverconfig
#sed -i.bak 's/auth-user-pass/auth-user-pass\ "$update"' $serverconfig
#sed -i.bak 's/'"$auth"'/'"$auth $update"' $serverconfig
# sed: -e expression #1, char 32: unterminated `s' command

应该找到文件“ auth-user-pass”中的行,并替换为“ auth-user-pass ../login.conf”。我无法传递语法错误:sed:-e表达式#1,char [#]:未终止的s命令

1 个答案:

答案 0 :(得分:0)

Sed几乎可以使用任何字符作为其“定界符”。您遇到了麻烦,因为您选择的定界符/出现在变量中。

sed -i.bak "s,$auth,$update" $serverconfig

您还可以通过g小叶操作来多次执行此替换操作:

sed -i.back "s,$auth,$update,g" $serverconfig