试图改变一个文本文件中值SED替代与线bash脚本使用sed的,使用bash变量
sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp
这将是一个for循环。不知道为什么它不起作用。有什么建议么?
试图改变一个文本文件中值SED替代与线bash脚本使用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"
这项工作?
单引号内的变量未扩展,在双引号内,在这种情况下使用双引号。
sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp
你也可以使它与eval
一起工作,但不这样做!
谢谢你的工作。你介意解释一下你的意思吗?我的直觉告诉我,它应该是类似的,可变的替代。另外为什么不使用eval? – csta
您可以使用像下面这样的变量。像这里一样,我想替换hostname
即文件中的系统变量。我找的字符串look.me
与look.me=<system_name>
sed -i "s/.*look.me.*/look.me=`hostname`/"
更换是整条生产线也可以存储在其他变量系统值,可以使用变量替换。
host_var=
`hostname`
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
也许还要提到,如果变量包含斜杠,则需要使用不会在字符串中出现的不同分隔符(或者在分隔符的每次出现时反斜杠)。斜杠是's'的常用默认值,但您可以使用任何标点符号; 'sed's%draw($ prev_number; n _)%draw($ number; n _)%g“file.txt”或“#from#to#g'或's_from_to_g'等 – tripleee