J'ai lu des informations sur les différences et les correctifs, mais je ne sais pas comment appliquer ce dont j'ai besoin. Je suppose que c'est assez simple, alors pour montrer mon problème, prenez ces deux fichiers:
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>
Je veux avoir une sortie, qui ressemble à ceci (l'ordre n'a pas d'importance):
<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>
La fusion doit contenir toutes les lignes selon ces règles simples:
- toute ligne qui se trouve uniquement dans l'un des fichiers
- si une ligne a la même étiquette de nom mais une valeur différente, prenez la valeur de la seconde
Je veux appliquer cette tâche dans un script bash, donc il ne doit pas nécessairement être fait avec diff et patch, si un autre programme est mieux adapté
diff
peut vous dire quelles lignes se trouvent dans un fichier mais pas dans l'autre, mais uniquement sur la granularité de lignes entières.patch
ne convient que pour apporter les mêmes modifications à un fichier similaire (peut-être une version différente du même fichier ou un fichier entièrement différent où cependant les numéros de ligne et les lignes environnantes pour chaque modification sont identiques à votre fichier d'origine). Donc non, ils ne sont pas particulièrement adaptés à cette tâche. Vous voudrez peut-être y jeter un œil,wdiff
mais la solution nécessite probablement un script personnalisé. Étant donné que vos données ressemblent à XML, vous voudrez peut-être rechercher un outil XSL.