我有一个包含版本号(major.minor.build)元素的XML文件,我想使用awk增加该值(保持文件的其余部分不变)。
例如,当文件包含:
时<ProductVersion>1.0.1</ProductVersion>
我希望将其更改为:
<ProductVersion>1.0.2</ProductVersion>
如果它简化了事情,我们可以假设ProductVersion元素总是在它自己的一行上。
[NB。我知道这是一种操作XML的快速而肮脏的方式,但它符合我当前的需求 - 即创建一个脚本,供个人使用,在Mac上使用Mono的xbuild运行。我正在使用Exec任务,而不是尝试在Mac上运行MSBuild社区任务等(暂时)。]
答案 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;