如何使用 Bash sed 修改整数

How to modify an integer using Bash sed

我有一个这样的 XML 节点:

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

我希望使用 Bash 将 x 乘以 2。我试过以下方法:

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

但它失败了:

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

知道如何进行这项工作吗?

这很容易用 perl 实现:

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

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

sed 不是正确的工具。您可以使用带有自定义 记录分隔符 :

的 gnu awk 命令
awk -v RS='.*x="|".*' '!NF{ s=RT } NF{ print s *2 RT }' file
<point type="2D" x="122" y="273" />

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