我需要在 Unix 上对 XML 文件进行一些操作。特别是在 1 个路径中,我有不同的 XML 文件。我需要剪切值 tradeId 标签的前 10 位数字,然后将其粘贴到发行标签中
<issuer issuerIdScheme="http://www.remove-234.org">549300ADFPIVCPUAAAA</issuer>
<tradeId tradeIdScheme="http://www.remove-234.org">1234567890ABCDEFGHILMN</tradeId>
所以,我需要得到这个结果:
<issuer issuerIdScheme="http://www.remove-234.org">1234567890</issuer>
和
<tradeId tradeIdScheme="http://www.remove-234.org">ABCDEFGHILMN</tradeId>
非常感谢你的帮助!
答案1
虽然在文本级别操作 XML 存在一些问题,但这可能已经足够好了:假设我们有一个 XML 文件
<something>
<issuer issuerIdScheme="http://www.remove-234.org">549300ADFPIVCPUAAAA</issuer>
<tradeId tradeIdScheme="http://www.remove-234.org">1234567890ABCDEFGHILMN</tradeId>
</somtehing>
然后运行
grep -v '<issuer issuerIdScheme' | sed 's/<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\(..........\)\([^<]*\)<\/tradeId>/<issuer issuerIdScheme="http:\/\/www.remove-234.org">\1<\/issuer>\n\t<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\2<\/tradeId>/'
将创建输出
<something>
<issuer issuerIdScheme="http://www.remove-234.org">1234567890</issuer>
<tradeId tradeIdScheme="http://www.remove-234.org">ABCDEFGHILMN</tradeId>
</somtehing>
编辑
对于对文件夹中的所有 XML 文件执行此操作的脚本,请尝试
#!/bin/bash
FOLDER="/home/cg/root"
for X in "$FOLDER"/*.xml; do
test -f "$X" || continue
mv "$X" "$X.ori" || continue
cat "$X.ori" | grep -v '<issuer issuerIdScheme' | sed 's/<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\(..........\)\([^<]*\)<\/tradeId>/<issuer issuerIdScheme="http:\/\/www.remove-234.org">\1<\/issuer>\n\t<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\2<\/tradeId>/' > "$X"
done