使用bash sed修改整数

时间:2015-01-20 14:52:38

标签: bash sed

我有一个像这样的XML节点:

<point type="2D" x="61" y="273" />

我想使用xbash乘以2。我尝试了以下内容:

echo '<rect key="frame" x="61" y="273" width="199" height="21"/>' | sed "s/x=\"\([[:digit:]]*\)\"/x=\"$((\1 * 2))\"/"

但它失败了:

syntax error: operand expected (error token is "\\1 * 2")

任何想法都可以让它发挥作用吗?

2 个答案:

答案 0 :(得分:3)

sed不是正确的工具。您可以将此gnu awk命令与自定义记录分隔符

一起使用
awk -v RS='.*x="|".*' '!NF{ s=RT } NF{ print s $1*2 RT }' file
<point type="2D" x="122" y="273" />

然而,最好使用适当的XML解析器进行彻底的XML解析。

答案 1 :(得分:1)

使用perl很容易实现:

perl -p -e 's/x="([0-9]+)"/"x=\"".($1*2)."\""/e' input.xml

要直接替换,请像使用sed一样添加-i。