我正在尝试编写一个脚本,在文件中搜索模式,并替换后面的单词,保留行尾。
例如
something0 var1=some_val var2=some_other_val something_bla0
something1 var1=some_va2 something_bla1
something2 var1=some_va3 var2=some_other_val2
更改为:
something0 var1=my_val var2=some_other_val something_bla0
something1 var1=my_val something_bla1
something2 var1=my_val var2=some_other_val2
我事先并不知道var1的值,但希望最终得到var1 = my_val,并且该行的结尾不变。
谢谢!
答案 0 :(得分:0)
只要$ FIELD和$ VALUE不需要转义
FIELD=var1
VALUE=my_val
sed "s/$FIELD=[^ ]*/$FIELD=$VALUE/" myfile.txt
答案 1 :(得分:0)
使用带有awk
函数的gensub()
命令的替代方法:
awk -v val="my_val" '{$2=gensub(/(var1=).*/, "\\1"val, 1, $2)}1' testfile
输出:
something0 var1=my_val var2=some_other_val something_bla0
something1 var1=my_val something_bla1
something2 var1=my_val var2=some_other_val2
$2
- 指向第二个字段(即var1=...
)
gensub(regexp,replacement,how [,target])
在目标字符串 target 中搜索正则表达式 regexp 的匹配项。
如果它应该通过所有行替换var1
值,则简化方法可能如下所示:
awk -v val="my_val" 'sub(/ var1=[^ ]*/, " var1="val)' testfile
答案 2 :(得分:0)
另一次尝试按子
更改第二个字段awk '{sub(/=some_va./,"=my_val",$2)}1' file
something0 var1=my_val var2=some_other_val something_bla0
something1 var1=my_val something_bla1
something2 var1=my_val var2=some_other_val2