如何使用AWK增加XML元素的(版本)值?

时间:2011-02-12 09:42:14

标签: xml awk increment version-numbering

我有一个包含版本号(major.minor.build)元素的XML文件,我想使用awk增加该值(保持文件的其余部分不变)。

例如,当文件包含:

<ProductVersion>1.0.1</ProductVersion>

我希望将其更改为:

<ProductVersion>1.0.2</ProductVersion>

如果它简化了事情,我们可以假设ProductVersion元素总是在它自己的一行上。

[NB。我知道这是一种操作XML的快速而肮脏的方式,但它符合我当前的需求 - 即创建一个脚本,供个人使用,在Mac上使用Mono的xbuild运行。我正在使用Exec任务,而不是尝试在Mac上运行MSBuild社区任务等(暂时)。]

2 个答案:

答案 0 :(得分:2)

因为我们可以假设产品版本是独立的,所以这是单向

awk -F"[><]" '/<ProductVersion>/{ 
    n=split($3,a,".")
    a[n]=a[n]+1
    s=a[1];for(i=2;i<n;i++)s=s"."a[i]; 
    $3=s"."a[n]
    $0="<ProductVersion>"$3"</ProductVersion>"}1' file

请注意,它只会增加最后一个数字。

答案 1 :(得分:1)

使用XSH2

#!/usr/local/bin/xsh
open prodver.xml;
$v = //ProductVersion;
perl {@a = split(/\./, $v);};
$m = {$a[2]};
$m += 1;
map :i { s/\.\d+$/.$m/ } //ProductVersion;
save;