开发者

How would I increment the (version) value of an XML element using AWK?

I have an XML file that contains a version number (major.minor.build) element and I'd like to increment that value using awk (leaving the rest of the file untouched).

For example, when the file contains:

<ProductVersion>1.0.1</ProductVersion>

I'd like it to be changed to:

<ProductVersion>1.0.2</ProductVersion>

If it simplifies things, we can assume that the ProductVersion element will always be on a line on it's own.

[NB. I know this is a quick and dirty way of manipulating XML, but it meets my current needs - i.e. creating a script, for my personal use, t开发者_开发百科o be run using Mono's xbuild on the Mac. I'm using the Exec task instead of attempting to get the MSBuild Community Tasks, etc. working on the Mac (for now).]


Since we can assume the product version is on a line by its own, here's one 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

Note it only increments the last number.


Use 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;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜