我有数百个 xml 文件要处理 - 有些有特定的所需标签,有些没有。如果我只是将标签添加到所有文件,那么一些文件会得到 2 个标签(这并不奇怪!)。如何在没有笨拙的 grep 的情况下在 xmlstarlet 中选择要处理的文件?例如:
我在一些文件中有这个:...
<parent_tag>
<another_tag/> <-- but not in all files
</parent_tag>
我想要这个(但有些文件已经有了):...
<parent_tag>
<good_tag>foobar</good_tag>
<another_tag/>
</parent_tag>
例如,这可行,但我希望我可以在没有 grep 的情况下完全在 xmlstarlet 中完成它:
grep -L good_tag */config.xml | while read i; do
xmlstarlet ed -P -S -s //parent_tag -t elem -n good_tag -v "" $i > tmp || break
\cp tmp $i
done
我让自己陷入了一些 XPATH 异国情调中,比如:
xmlstarlet sel --text --template --match //parent_tag --match "//parent_tag/node()[not(self::good_tag)]" -f --nl */config.xml
...但它没有做我所希望的...