我有一个XML文件,其版本号格式如下:
<Product Id="*" Name="Name" Language="1033" Version="1.2.3.4">
我想在版本字符串中找到最后一个数字(在本例中为“4”),然后将其递增1 - 将其替换为文件。理想情况下使用简单的bash命令(AWK?)。
答案 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