Ich habe über Diff und Patch gelesen, kann aber nicht herausfinden, wie ich das, was ich brauche, anwenden soll. Ich denke, es ist ziemlich einfach, also nimm diese zwei Dateien, um mein Problem zu zeigen:
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>
Ich möchte eine Ausgabe haben, die so aussieht (Reihenfolge spielt keine Rolle):
<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>
Die Zusammenführung sollte alle Zeilen nach diesen einfachen Regeln enthalten:
- Jede Zeile, die sich nur in einer der Dateien befindet
- Wenn eine Zeile den gleichen Namen, aber einen anderen Wert hat, wird der Wert aus der zweiten übernommen
Ich möchte diese Aufgabe in einem Bash-Skript anwenden, damit es nicht unbedingt mit diff und patch fertig werden muss, wenn ein anderes Programm besser passt
diff
kann Ihnen sagen, welche Zeilen sich in einer Datei befinden, aber nicht in der anderen, sondern nur in der Granularität ganzer Zeilen.patch
eignet sich nur, um dieselben Änderungen an einer ähnlichen Datei vorzunehmen (möglicherweise eine andere Version derselben Datei oder eine völlig andere Datei, bei der jedoch die Zeilennummern und die umgebenden Zeilen für jede Änderung mit Ihrer Originaldatei identisch sind). Nein, sie sind für diese Aufgabe nicht besonders geeignet. Vielleicht möchten Sie einen Blick darauf werfen,wdiff
aber für die Lösung ist wahrscheinlich ein benutzerdefiniertes Skript erforderlich. Da Ihre Daten wie XML aussehen, sollten Sie nach einem XSL-Tool suchen.