others - 使用bash/sed/awk在文件中替换变量值

我有一个源文件(python ),其中包含:


MYVARIABLE = 123


OTHERVAR = 23


print str(MYVARIABLE)



我想通过从远程终端将MYVARIABLE的值更改为456,而不需要重复进行文本编辑,只需要命令行。

时间:

另一个sed


sed -r 's|^(MYVARIABLEs*=s*).*|1456|' file



通过sed


$ sed '/^MYVARIABLE/s/^(.*=s*).*$/1456/' file


MYVARIABLE = 456


OTHERVAR = 23


print str(MYVARIABLE)



使用awk


awk '{if (/MYVARIABLE = [0-9]*/){print"MYVARIABLE = 456"}else{print $0}}' file


MYVARIABLE = 456


OTHERVAR = 23


print str(MYVARIABLE)



假定sed版本支持字符类,你可以编写:


sh$ sed -r 's/([[:blank:]]*MYVARIABLE[[:blank:]]*=[[:blank:]]*)[[:digit:]]+/1456/' file.py


MYVARIABLE = 456


OTHERVAR = 23


print str(MYVARIABLE)



或者


sh$ sed -r 's/(s*MYVARIABLEs*=s*)[0-9]+/1456/' file.py


MYVARIABLE = 456


OTHERVAR = 23


print str(MYVARIABLE)



两者都将保留变量定义之前的空格,这很重要,因为缩进在python中很重要。

请注意,这是相当脆弱的,某些有效的python变量声明可能没有被简单的正规表达式修改。

来自man sed


 -i[SUFFIX], --in-place[=SUFFIX]



 edit files in place (makes backup if extension supplied)



这个解决方案限制了给定部分的更改,这通常是ini文件。


sed -ri '/'$SECTION'/,/[/ s/(s*'$KEY's*=s*).+/1'$VALUE'/'"$INI_FILE"



此简单awk应该执行以下操作:


awk '/^MYVARIABLE/ {$3="456"}1' file


MYVARIABLE = 456


OTHERVAR = 23


print str(MYVARIABLE)



如果以MYVARIABLE开头,请将第三个字段改为456
1打印所有行。


$ awk -v var="MYVARIABLE" -v val="456" '$1==var{$NF=val} 1' file


MYVARIABLE = 456


OTHERVAR = 23


print str(MYVARIABLE)



$ awk -v var="OTHERVAR" -v val="123456" '$1==var{$NF=val} 1' file


MYVARIABLE = 123


OTHERVAR = 123456


print str(MYVARIABLE)



...