通过bash命令增加文件中的版本号

时间:2015-09-12 17:31:04

标签: regex bash awk

我有一个XML文件,其版本号格式如下:

<Product Id="*" Name="Name" Language="1033" Version="1.2.3.4">

我想在版本字符串中找到最后一个数字(在本例中为“4”),然后将其递增1 - 将其替换为文件。理想情况下使用简单的bash命令(AWK?)。

4 个答案:

答案 0 :(得分:4)

你可以使用perl。

perl -i -pe 's/\b(\d+)(?=\D*$)/$1+1/e' file

perl -i -pe 's/\bVersion="[^"]*\K\b(\d+)(?=[^"]*")/$1+1/e' file

示例:

$ echo '<Product Id="*" Name="Name" Language="1033" Version="1.2.3.4">' | perl -pe 's/\b(\d+)(?=\D*$)/$1+1/e'
<Product Id="*" Name="Name" Language="1033" Version="1.2.3.5">

答案 1 :(得分:1)

这是一个awk命令,它也适用于非gnu awk(BSD)版本:

Size of int = 8 bytes

<强>输出:

s='<Product Id="*" Name="Name" Language="1033" Version="1.2.3.9">'

awk -F '[="]+' '{
   for(i=1; i<=NF; i++)
      if ($(i-1) == " Version") {
           n = split($i, vers, ".");
           sub(/\.[0-9]+"/, "." vers[n]+1 "\"")
      }
} 1' <<< "$s"

答案 2 :(得分:0)

我可以尝试使用awk match and gsub functions

echo '<Product Id="*" Name="Name" Language="1033" Version="1.2.3.4">' |
awk '{
  match($0, /\.([0-9]+)([^0-9]*)$/, a); 
  gsub(/\.([0-9]+)[^0-9]*$/,"." a[1]+1 a[2]); 
  print;
}'

你得到了

<Product Id="*" Name="Name" Language="1033" Version="1.2.3.5">

如果输入是,例如:

<Product Id="*" Name="Name" Language="1033" Version="1.2.3.99">

输出是:

<Product Id="*" Name="Name" Language="1033" Version="1.2.3.100">

答案 3 :(得分:0)

假设您的文件名为version.xml,您可以尝试以下操作:

CURRENT=$(awk -F'"' '{print $8}' version.xml)
NEXT=$(echo ${CURRENT}|awk -F. '{print $1"."$2"."$3"."$4+1}')
sed "s/Version.*/Version=\"${NEXT}\">/g" version.xml