簡體   English   中英

如何使用 sed 命令增加字符串子部分中的數字? 並且輸入將動態更改

[英]How can I increment a number in a sub part of a string using sed command? and the input will be changed dynamically

我想使用sed將字符串version="01.00.00.041"的子部分增加 1。 例如: version="01.00.00.041"version="01.00.00.042"並且它應該是動態的而不是 static。 我的意思是,每次構建時版本號都會更改,因此它應該是sed的輸入,最后一位應該遞增。

編輯:(從評論中收集)
我試過如下:

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

編輯:由於 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

Output 如下。

version="01.00.00.42"

如果您想將 output 保存到 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

使用 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM