在UNIX中查找变量的值并将其替换为新值
我想访问一个文本文件并读取其中的一些内容,以使用新值对其进行更改 这确实很有帮助,但我的要求略有不同 如果这些是我的文件内容在UNIX中查找变量的值并将其替换为新值,unix,awk,sed,cleartool,Unix,Awk,Sed,Cleartool,我想访问一个文本文件并读取其中的一些内容,以使用新值对其进行更改 这确实很有帮助,但我的要求略有不同 如果这些是我的文件内容 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
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”,所以现在我需要一些脚本来查找变量Image.version的值,并将值自动递增到下一个可能的整数
有什么建议/想法吗?与GNU awk一起匹配第三个参数() 对于其他的,因为不涉及算术,所以您应该能够类似地使用
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
既然你找到了一些相关的答案,你尝试了什么?显示您的尝试,您可能接近解决方案!image.description的值是否始终模板图像MMDDYYYY
?或者在日期之前会有不同的(或没有)词吗?约会之后会有什么词吗?@jas,永远都是一样的。只有数字内容会根据当前日期更改。您说的是自动递增,但是如果第一行的值是08312015
而不是08192015
,那么它应该递增到什么?如果答案不是08322015
,那么它就变成了一个完全不同的问题,而不仅仅是自动递增一个数字。@EdMorton是的,你是正确的。这里有两种情况:1)将整数增加到下一个数字。2) 如果是日期,则应为当前日期、月份和年份。
$ 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