我需要使用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的。
非常感谢你的帮助。
答案 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"