在 Unix 上修改 XML 文件的值

在 Unix 上修改 XML 文件的值

我需要在 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

相关内容