在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命令
答案 0 :(得分:0)
Sed几乎可以使用任何字符作为其“定界符”。您遇到了麻烦,因为您选择的定界符/
出现在变量中。
sed -i.bak "s,$auth,$update" $serverconfig
您还可以通过g
小叶操作来多次执行此替换操作:
sed -i.back "s,$auth,$update,g" $serverconfig