Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在UNIX中查找变量的值并将其替换为新值_Unix_Awk_Sed_Cleartool - Fatal编程技术网

在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