如何用双精度值替换 XML 文件中的数字?

如何用双精度值替换 XML 文件中的数字?

输入文件“input.xml”:

<integer name="leftValue">30</integer>
<integer name="rightValue">580</integer>
<integer name="rightValueDefault">495</integer>

我想要每个数值都乘以 2:

<integer name="leftValue">60</integer>
<integer name="rightValue">1160</integer>
<integer name="rightValueDefault">990</integer>

怎么做?

答案1

使用适当的 XML 解析器。例如,在西沙,你可以写

open input.xml ;
for //text if (. > 0) set . (2 * .) ;
save :b ;

答案2

一般来说,你不应该使用正则表达式来解析 HTML / XML

但是,如果您的输入文件确实像示例中所示的那样(每行上只有一个开始和结束标记,并且>在开始标记结束之前没有字符),则使用 Perl:

perl -pe 's/>([0-9]+)/">".$1*2/e' in
  • s:断言执行替换
  • /:开始模式
  • >: 匹配一个>字符
  • ([0-9]+):匹配并分组一个或多个数字
  • /:停止模式/开始替换字符串
  • ">".$1*2:表达式;两个字符串的连接,一个>字符和第一个捕获组乘以2
  • /:停止替换字符串/启动模式标志
  • e:断言评估替换字符串
% cat in
<integer name="leftValue">30</integer>
<integer name="rightValue">580</integer>
<integer name="rightValueDefault">495</integer>
% perl -pe 's/>([0-9]+)/">".$1*2/e' in
<integer name="leftValue">60</integer>
<integer name="rightValue">1160</integer>
<integer name="rightValueDefault">990</integer>

相关内容