我想访问一个文本文件并阅读其中的一些内容,以便用新值更改它们。
这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 的值,然后自动将值增加到下一个可能的整数。
有任何建议/想法吗?
答案 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