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