Я читав про diff та патч, але не можу зрозуміти, як застосувати те, що мені потрібно. Я думаю, що це досить просто, тому щоб показати свою проблему, візьміть ці два файли:
a.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.