【问题标题】:Correct sed syntax for variables [duplicate]更正变量的 sed 语法[重复]
【发布时间】:2019-10-13 08:49:27
【问题描述】:

在我的 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 expression #1, char [#]: unterminated `s' command

【问题讨论】:

  • 尝试更改分隔符
  • 你只需要一个斜杠:sed -i.bak "s/$auth/$update/" $serverconfig
  • 我得到了sed: -e expression #1, char 32: unterminated s 命令`:sed -i.bak "s/$auth/$update/" $serverconfig

标签: bash sed


【解决方案1】:

Sed 几乎可以使用任何字符作为它的“分隔符”。您遇到了问题,因为您选择的分隔符 / 出现在您的变量中。

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

您还可以使用global 操作尽可能多次地执行此替换:

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

【讨论】:

猜你喜欢
  • 2019-06-24
  • 2013-01-19
  • 2013-11-05
  • 1970-01-01
  • 2019-05-18
  • 2014-01-09
  • 2018-07-28
  • 2013-06-28
  • 2019-01-30
相关资源
最近更新 更多