2011-02-12 51 views
0

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

例如,当文件包含:

<ProductVersion>1.0.1</ProductVersion> 

我想它改为:

<ProductVersion>1.0.2</ProductVersion> 

如果它简化了的东西,我们可以假设的ProductVersion元素总会在自己的行上。

[注意。我知道这是一种处理XML的快速和肮脏的方式,但它满足了我目前的需求 - 即为我的个人使用创建一个脚本,使用Mac上的Mono的xbuild运行。我正在使用Exec任务,而不是尝试在Mac上(现在)使用MSBuild社区任务等。]

回答

2

由于我们可以假定产品版本是由它自己组成的,所以这里是一个way

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

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