【发布时间】:2021-10-31 00:09:04
【问题描述】:
我有以下test.xml 文件,我想将属性value 替换为特定范围。
我想根据用户输入将RC value 的数量替换为随机数。
例如:如果用户只想替换前三个RC value,那么它应该更新前三个RC value。
test.xml内容如下:
<documents><document id ="test"><doc:meta title = 'test-title'><doc-transform><item name="RC" value="1445352777130287"></item><item name="VERSION" value="05-07-0044"></item><item name="DATE" value="2021-08-25"></item></doc-transform></doc:meta></document><document id ="test-2"><doc:meta title = 'test-title-2'><doc-transform><item name="RC" value="3527771302"></item><item name="VERSION" value="05-07-0044"></item><item name="DATE" value="2021-08-25"></item></doc-transform></doc:meta></document></documents>
我已经在 shell 脚本中尝试了以下代码,但它仍然替换了所有 RC 属性 value:
var=$1 #Command line arguments
var2=$RANDOM
for i in $1;
do
sed -E -i 's|(item name="RC" value=").*(">)|\1'$var2'\2|' test.xml
done
我已经在shell脚本中尝试了另一个代码,但它仍然替换了所有RC属性value:
var=$1 #Command line arguments
var2=$RANDOM
for i in $1;
do
sed -E -i 's|(item name="RC" value=").*(">)|\1'$var2'\2|$var' test.xml
done
您能否为此提出解决方案?
如果可以迭代交互模式,你们能建议我吗?
【问题讨论】:
-
使用真正的 XML 解析器来处理 XML。否则,XML 处理可能出错的方式太多了。对于这样的事情,我会进一步建议使用 XSLT 处理器(它必须包含 XML 解析器)。