找到变量的值,并在UNIX中将其替换为新值

时间:2015-08-19 15:05:54

标签: unix awk sed cleartool

我想访问一个文本文件并阅读其中的一些内容,以便用新值更改它们。

Find and Replace非常有用,但我的要求略有不同。

说这些是我的文件内容

image.description=Template Image 08182015
image.version=1.3.111
baseline.name=001_08_18_2015

我想将它们改为

image.description=Template Image 08192015   #19 instead of 18
image.version=1.3.112                       #112 instead of 111
baseline.name=001_08_19_2015                #19 instead of 18

在任何时候我都不知道每个变量的值是多少,但我所知道的是变量名称,如"图像版本"所以现在我需要一些脚本来查找变量 image.version 的值,然后自动将值增加到下一个可能的整数。

有任何建议/想法吗?

1 个答案:

答案 0 :(得分:1)

使用GNU awk为第3个arg匹配():

$ awk 'match($0,/(image\.version.*\.)(.*)/,a){$0=a[1] a[2]+1} 1' file
image.description=Template Image 08182015
image.version=1.3.112
baseline.name=001_08_18_2015

对于其他人,因为不涉及算术,你应该能够同样地使用gensub()

或者,也许这就是你正在寻找的东西:

$ cat tst.awk
BEGIN { FS=OFS="=" }
$1=="image.description" { match($2,/.* ../); $2=substr($2,1,RLENGTH) substr($2,1+RLENGTH,2)+1 substr($2,3+RLENGTH) }
$1=="image.version"     { match($2,/.*\./);  $2=substr($2,1,RLENGTH) substr($2,1+RLENGTH)+1 }
$1=="baseline.name"     { split($2,a,/_/);   $2=a[1]"_"a[2]"_"a[3]+1"_"a[4] }
{ print }

$ awk -f tst.awk file
image.description=Template Image 08192015
image.version=1.3.112
baseline.name=001_08_19_2015