Bash:在sed中使用变量,双引号会导致错误

时间:2015-01-15 09:36:24

标签: bash sed

我需要使用sed和变量替换文件中的代码块。以下示例通常对我不起作用:

confSearch="\"host\": \"localhost\""
confReplacement="\"host\": \"10.20.30.40\""

sed -i "s|$confSearch|$confReplacement|g" "$configFile"

但是,如果没有变量,它可以工作:

sed -i "s|\"host\": \"localhost\"|$confReplacement|g" "$configFile"

这个搜索但是当然只替换变量名:

sed -i 's|\"host\": \"localhost\"|$confReplacement|g' "$configFile'

将变量放入双引号或单引号也对我没有任何意义。 RedHat的。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您的第一个示例没有使用$confSearch - 这是您的问题中的拼写错误,还是错误的来源?您的代码可以正常使用我:

$ cat f
"host": "localhost"
$ confSearch="\"host\": \"localhost\""
$ confReplacement="\"host\": \"10.20.30.40\""
$ sed "s|$confSearch|$confReplacement|g" f
"host": "10.20.30.40"

为了避免转义这么多双引号,您可以使用单引号定义变量 - 双引号在用单引号括起来时并不特殊。

$ confSearch='"host": "localhost"'
$ confReplace='"host": "10.20.30.40"'
$ sed "s|$confSearch|$confReplacement|g" f
"host": "10.20.30.40"