sed在xml中查找并替换范围

时间:2016-02-18 11:52:22

标签: xml replace sed

我有一个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?

1 个答案:

答案 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}的缩写。)