我有兴趣找出一个可以编写的最短脚本来替换文件中的一个XML元素和另一个文件中的另一个XML元素。
我可以轻松地创建一个简单的程序,但我想知道它是否可以轻松地使用shell脚本。它只是一个实用工具,意味着方便。可以使用sed
完成吗? awk
?我不熟悉那些。我想我可以使用grep
和wc
的组合来完成它,但似乎有更直接的方法来做到这一点。
基本上,我有一个大型配置文件,比如说config.xml
,它看起来像这样:
<config>
<element name="a">
<subelement />
</element>
<element name="b">
<subelement />
</element>
<element name="c">
<subelement />
</element>
<!-- and so on... -->
</config>
偶尔,更改需要我修改/添加/删除一个subelement
。现在,碰巧有一种生成最新subconfig.xml
的生成器,如下面的文件:
<config>
<element name="c">
<subelement />
<subelement />
</element>
</config>
我的想法是,如果我可以在element
中取subconfig.xml
并替换config.xml
中现有的{{1}},那么嘿,这太棒了!是的,它不是一个节省工作的人,因为它只是很少需要,但我刚想到我可以尝试用脚本来做,但我不确定如何。
任何帮助表示赞赏(包括指出我最好为此编写程序^ - ^)。
答案 0 :(得分:1)
我不会尝试使用命令行工具执行此操作,您将遇到各种各样的困难。你应该这样做的方法是使用适当的XML解析器。逻辑是:使用原始文件,解析它,使用更新文件,解析它,识别这个人要替换的节点,进行替换,写出结果。
我不知道您对编码方面的满意度,但是大多数流行语言都提供了XML解析器。
答案 1 :(得分:1)
如果你的xml是一致的并且你的替换要求很简单,那么实际上不需要使用解析器。只需简单的awk即可
$ subconfig=(<subconfig.xml)
$ awk -v subconf=$subconfig '/<config>/{print subconf}/<config>/,/<\/config>/{next}1' config.xml