【问题标题】:Bash replace line using sed and 2 variablesBash 使用 sed 和 2 个变量替换行
【发布时间】:2015-11-10 16:16:07
【问题描述】:

我正在尝试使用 sed 和 2 个变量替换文件中的一行。我试过这个:

    varFind=$(echo "cfg_dir=/usr/local/.file1.cfg")
    varReplace=$(echo "cfg_dir=/usr/dir1/file2.cfg")

    sed -i "s/${varFind}/${varReplace}/" /usr/local/file.txt

但它一直在抛出这个:

    user@localhost:~# ./script.sh sed: -e expression #1, char 17: unknown option to `s'

我做错了什么?我看过了,它似乎对我来说是正确的。

【问题讨论】:

  • 将真正的 string1 和 string2 添加到您的问题中。
  • 您的示例按预期工作@Cyrus 假定varReplacevarFind 中有一个奇怪的字符,例如'/'。
  • 如果我的变量类似于varFind=$(echo "/usr/local/test.txt") 会有问题吗?
  • 是的,/ 用于分隔s 的参数。您可以使用另一个分隔符,例如 %
  • 但是varFind 中的字符串是什么类似于cfg_dir=/usr/local?我该如何解决这个问题?

标签: linux bash ubuntu sed scripting


【解决方案1】:

解决问题的最简单方法是更改​​s 命令的分隔符。将您的 sed 命令更改为:

sed -i "s%${varFind}%${varReplace}%" /usr/local/file.txt

只要您的变量不包含%,这将有效。

【讨论】:

  • 谢谢,我还是个 bash 新手,需要一点时间才能掌握它。
猜你喜欢
  • 2011-12-02
  • 2021-11-20
  • 1970-01-01
  • 2017-08-02
  • 2017-04-16
  • 1970-01-01
  • 2014-11-20
  • 2014-06-08
  • 1970-01-01
相关资源
最近更新 更多