如何使用 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 解析。
我有一个这样的 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
不是正确的工具。您可以使用带有自定义 记录分隔符 :
awk -v RS='.*x="|".*' '!NF{ s=RT } NF{ print s *2 RT }' file
<point type="2D" x="122" y="273" />
然而,最好使用适当的 XML 解析器进行彻底的 XML 解析。