输入文件“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>