2015-01-15 37 views
0

我需要使用sed和变量替换文件中的代码块。我这里还有它一般不为我工作的例子:Bash:在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' 

把一个变量放入双引号或单引号中也对我无能为力。红帽。

将不胜感激的帮助。

回答

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" 
+0

这是一个错字。谢谢,你说的这么多的双引号是逃避的。我也知道它应该可以工作,但事实并非如此。 –

+0

天哪,它终于工作后,我已经改变包装双引号单变量。绝对不知道为什么,多次检查变量的语法。非常感谢你。 –