我有一个xml文本文件,其中包含一个值数组,应由另一个值范围替换,这是起点
<tag1>
<tag2> \myvalue[0]<tag2>
<tag2> \myvalue[1]<tag2>
<tag2> \myvalue[2]<tag2>
</tag1>
应该成为:
<tag1>
<tag2> \myvalue[20]<tag2>
<tag2> \myvalue[21]<tag2>
<tag2> \myvalue[22]<tag2>
</tag1>
有没有办法说用0到10代替20到30?
答案 0 :(得分:0)
sed
不是很擅长算术,所以如果你真的需要执行任何算术,使用awk
可能比使用sed
更好。需要注意的是,任何不使用XML感知工具的方法都会变得复杂或脆弱,如下所述,这是一个稍微强大的问题解决方案:
awk '
$1 == "<tag2>" {
n=split($2,a, /[][]/);
if (a[2] ~ /^[0-9]+$/) {
a[2] += 20; a[2] = "[" a[2] "]";
s=""; for (i=1;i<=n;i++) s=s a[i];
$2 = s;
}
} 1'
单词:如果一行上的第一个标记是<tag2>
,并且第二个标记中的方括号内嵌有整数,则将20添加到该整数,并使用替换整数打印该行;否则,只需打印线。 (最终1
实际上是{print}
的缩写。)