Bash: 在sed中使用变量,双引号引起错误

Bash: using variables in sed, double quotes cause error

我需要使用 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'

将变量放入双引号或单引号中对我也没有任何作用。红帽

非常感谢您的帮助。

您的第一个示例没有使用 $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"