gsed 用单引号替换变量 $i

gsed replace by a variable $i with single quote

我已将以下行放入文本文件中:

\[Omega]BD=100;

我想用 shell 变量(zsh shell)用 gsed 值 100 替换,这里 600 :

我试过了:

$ i=600

$ gsed  's/\[Omega]BD=.*/\[Omega]BD=\'\"$i"\';/' text_to_modify.txt | grep 600

但它 returns 我 :

\[Omega]BD=0; 而不是 \[Omega]BD=600;

这是一个我不想要的附加反斜杠,我想知道如何删除这个反斜杠。我想保留 gsed 's/.../.../'

的 2 个单引号

有什么想法吗?

您可以使用这个 sed 命令:

i=600
sed -E "s/(\\\[Omega]BD=).*/$i;/" file

\[Omega]BD=600;

我们需要额外的转义,即 \\ 来匹配单个 \,因为我们在完整的 sed 命令周围使用双引号。

或者我们可以避免你可以使用这种单引号和双引号的组合来避免额外的转义:

sed -E 's/(\\[Omega]BD=).*/'"$i;/" file

使用sed

i=600
$ sed "/\[Omega]/s/[[:digit:]]\+/$i/" input_file
\[Omega]BD=600;