【问题标题】:sed find and replace in xml with rangesed 在 xml 中查找并替换为范围
【发布时间】:2016-05-30 13:48:00
【问题描述】:

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

有没有办法说用 20 到 30 替换 0 到 10?

【问题讨论】:

    标签: xml replace sed


    【解决方案1】:

    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'
    

    换句话说:如果一行的第一个标记是&lt;tag2&gt;,并且如果第二个标记的方括号中嵌入了一个整数,则将该整数加20,并用替换整数打印该行;否则,只需打印该行。 (最后的1实际上是{print}的简写。)

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2021-12-07
      • 2017-08-07
      • 1970-01-01
      相关资源
      最近更新 更多