在保留文件中行尾的模式后替换字符串

时间:2017-03-28 15:16:22

标签: bash sed

我正在尝试编写一个脚本,在文件中搜索模式,并替换后面的单词,保留行尾。

例如

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,并且该行的结尾不变。

谢谢!

3 个答案:

答案 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