sed忽略替换字符串中的引用

时间:2015-05-08 00:30:54

标签: bash sed

我正在尝试用一个文件中的引号替换另一个字符串中的字符串,比如$ FILE。我试图使用sed。

我想将m = uniform(0, 0, 1)替换为m.LoadFile("run2_initial_$NF.ovf")

我正在使用它:

sed -i 's#m     = uniform(0, 0, 1)#m.LoadFile("run2_initial_$NF.ovf")#g' $FILE

我得到的是m = uniform(0, 0, 1)取代m.LoadFile(run2_initial_$NF.ovf)

也就是说,sed只是忽略了替换字符串中的引号。

我做了些蠢事吗?

请建议。

编辑:当我现在尝试时,引号现在正常工作。虽然$ NF没有被数字取代:(

我在新文件中得到的是:

m.LoadFile(" run2_initial_ $ NF.ovf&#34)

而我想:m.LoadFile(" run2_initial_3.ovf")

1 个答案:

答案 0 :(得分:1)

如果你使用双引号,字符串中的变量将被它们的值替换,如果你使用单引号,它们就赢了。

你需要做的是用双引号替换单引号,并转义你已经有的双引号:

$ echo "m     = uniform(0, 0, 1)" | \
  sed "s#m     = uniform(0, 0, 1)#m.LoadFile(\"run2_initial_$NF.ovf\")#g"
m.LoadFile("run2_initial_3.ovf")