用bash变量替换sed

尝试使用sed在文本文件中更改bash脚本中的值,

sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp 

这将在for循环。 不知道为什么它不工作。 有什么建议么?

'里面'变量不被bash替换。 要获得字符串替换(或插值,如果你熟悉Perl),你需要改变它使用双引号"而不是单引号:

 sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp 

另外,除非你在不同的文件中需要它,你可以使用-i标志来改变文件。

单引号内的变量不会扩展,在双引号内,在这种情况下使用双引号。

 sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp 

你也可以使它与eval ,但不这样做!

 sed "s/draw($prev_number;n_)/draw($number;n_)/g" 

这会工作吗?

你可以使用像下面这样的变量。 就像这里,我想替换hostname即文件中的系统变量。 我正在寻找字符串look.me并用look.me=<system_name>替换整行

 sed -i "s/.*look.me.*/look.me=`hostname`/" 

您也可以将系统值存储在其他变量中,并可以使用该变量进行替换。

host_var= `主机名'

sed -i "s/.*look.me.*/look.me=$host_var/"


输入文件:

 look.me=demonic 

输出文件(假设我的系统名称是prod-cfm-frontend-1-usa-central-1 ):

 look.me=prod-cfm-frontend-1-usa-central-1