Ho letto di diff e patch ma non riesco a capire come applicare ciò di cui ho bisogno. Immagino sia piuttosto semplice, quindi per mostrare il mio problema prendi questi due file:
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>
Voglio avere un output, che assomigli a questo (l'ordine non ha importanza):
<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>
L'unione dovrebbe contenere tutte le righe lungo queste semplici regole:
- qualsiasi riga che si trova solo in uno dei file
- se una riga ha lo stesso tag di nome ma un valore diverso, prendi il valore dal secondo
Voglio applicare questo compito all'interno di uno script bash, quindi non deve necessariamente essere fatto con diff e patch, se un altro programma è più adatto
diff
può dirti quali righe si trovano in un file ma non nell'altro, ma solo sulla granularità di intere righe.patch
è adatto solo per apportare le stesse modifiche a un file simile (forse una versione diversa dello stesso file o un file completamente diverso in cui, tuttavia, i numeri di riga e le righe circostanti per ogni modifica sono identici al file originale). Quindi no, non sono particolarmente adatti per questo compito. Potresti dare un'occhiatawdiff
ma la soluzione probabilmente richiede uno script personalizzato. Dato che i tuoi dati sembrano XML, potresti voler cercare alcuni strumenti XSL.