我已经阅读了有关diff和patch的内容,但我不知道如何应用所需的内容。我想这很简单,因此为了显示我的问题,请使用以下两个文件:
xml文件
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#AAAAAA</color>
<color name="not_in_b_too">#AAAAAA</color>
</resources>
b.xml
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
我想要一个输出,看起来像这样(顺序无关紧要):
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_b_too">#AAAAAA</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
合并应包含遵循以下简单规则的所有行:
- 仅在其中一个文件中的任何行
- 如果一行具有相同的名称标签但值不同,则从第二行取值
我想在bash脚本中应用此任务,因此如果另一个程序更合适,那么它不一定需要完成diff和patch的操作。
diff
可以告诉您在一个文件中有哪些行,而在另一个文件中则不是,而只能告诉您整个行的粒度。patch
仅适用于对相似文件进行相同的更改(也许是同一文件的不同版本,或者是完全不同的文件,但是每次更改的行号和周围的行都与原始文件相同)。因此,它们不是特别适合此任务。您可能想看一下,wdiff
但是解决方案可能需要自定义脚本。由于您的数据看起来像XML,因此您可能需要寻找一些XSL工具。