如何使用 sed 命令递增字符串子部分中的数字? 输入将动态更改



我想使用sed将字符串version="01.00.00.041"的子部分增加 1。 例如:version="01.00.00.041"version="01.00.00.042",它应该是动态的而不是静态的。我的意思是,每次构建时版本号都会更改,因此它应该是sed的输入,最后 1 位数字应该递增。

编辑:(从评论中收集(
我已经尝试过如下:

sed -i "s/version.*/version="${print $ "."$ "."$ "."$ +1}}">/g" descriptor.xml

使用 perl:

$ echo 'version="01.00.00.041"' | perl -pe 's/(d+)(?=")/sprintf("%0*d", length($1), $1+1)/e'
version="01.00.00.042"

递增引号前的最后一组数字,根据字段长度而不是硬编码数字填充 0。

编辑: 由于OP添加了信息,因此根据信息添加代码。

awk -v version="version="01.00.00.42"" 'BEGIN{FS=OFS=".";s1="""} match($0,version) && ++count==2{$NF+=1;$NF=$NF s1} 1' Input_file


这是OP添加的工作解决方案:

grep version descriptor.xml | tail -n 1 | awk -F= '{print $2}' | awk -F" '{print $2}' increatedNum=$(printf "%03d" expr $(echo $OldVersion | cut -d'.' -f4) + 1) NewVersion=echo $OldVersion | cut -d'.' -f1-3.$increatedNum sed -i "s/$OldVersion/$NewVersion/g" descriptor.xml

您能否尝试以下操作。

awk 'BEGIN{FS=OFS=".";s1="""} {$NF+=1;$NF=$NF s1} 1'  Input_file

输出将如下所示。

version="01.00.00.42"

如果您想将输出保存到Input_file本身,请使用以下内容。

awk 'BEGIN{FS=OFS=".";s1="""} {$NF+=1;$NF=$NF s1} 1' Input_file > temp && mv temp Input_file


或者根据@tshiono的评论,您也可以尝试关注。

awk 'BEGIN{FS=OFS=".";s1="""} {$NF+=1;$NF=sprintf("%03d%c", $NF, s1)} 1' Input_file

最新更新