Wie man drei Dateien unter Linux mit dem diff3-Tool vergleicht

Was wäre, wenn die Anforderung darin besteht, nicht zwei, sondern drei Dateien zu vergleichen? Ja, es gibt auch dafür ein Linux-Kommandozeilenprogramm, und es heißt entsprechend diff3.

Wenn Sie nach einem solchen Tool gesucht haben, dann suchen Sie nicht weiter, denn in diesem Tutorial werden wir die Verwendung von diff3 anhand leicht verständlicher Beispiele erklären.

Diff3 installieren

Das diff3-Tool wird wahrscheinlich standardmäßig auf Ihrem System installiert – unter Ubuntu ist es mindestens so. Aber wenn das nicht der Fall ist, dann machen Sie sich keine Sorgen, denn Sie können es einfach tun, indem Sie das GNU Diffutils-Paket installieren. Anweisungen zum Herunterladen und Installieren des Pakets auf Ihrem System finden Sie hier.

Diff3 Verwendung

Da das diff3-Dienstprogramm drei Dateien vergleicht, müssen wir für unsere Anwendungsbeispiele drei Dateien nehmen, die wir als Input an das Tool übergeben.

Hier ist die Datei1:

This is line1 with some change
This is line2
This is line3

Hier ist die Datei2:

This is line1
This is line2
This is line3

Und hier ist die Datei3:

This is line1
This is line2
This is line3

Wenn wir den Inhalt dieser drei Dateien sehen, liegt die einzige Änderung eindeutig in der ersten Zeile der ersten Datei. Nun wollen wir also sehen, wie diff3 diese Änderung meldet.

Hier ist, wie wir diff3 in diesem Fall verwenden können:

diff3 file1 file2 file3

Und hier ist der Output, den es produziert:

====1
1:1c
 This is line1 with some change
2:1c
3:1c
 This is line1

Sie können die Ausgabe wie folgt nachvollziehen:

  • Die erste Zeile, die mit vier’=‘-Zeichen beginnt und mit der Zahl’1′ endet, sagt, dass die Änderung in der ersten Datei erfolgt.
  • In der nächsten Zeile bedeutet die erste ‚1‘ Datei1; die ‚1c‘ nach dem Doppelpunkt ‚bedeutet erste Zeile enthält‘. Die aktuelle Zeile wird in der nächsten Zeile des Ausgangs angezeigt.
  • Ebenso bedeuten 2:1c und 3:1c „die erste Zeile von file2 und file3 enthalten“. Und da der Inhalt der Zeile in beiden Dateien gleich ist, wird die aktuelle Zeile nur einmal am Ende der Ausgabe angezeigt.

Um die Dinge klarer zu machen, nehmen wir einen anderen Fall, bei dem die Änderung in file3 liegt.

Hier ist die Datei1:

This is line1
This is line2
This is line3

Hier ist die Datei2:

This is line1
This is line2
This is line3

Und hier ist die Datei3:

This is line1 with some change
This is line2
This is line3

Der Befehl bleibt unverändert:

diff3 file1 file2 file3

Und hier ist die Ausgabe:

====3
1:1c
2:1c
 This is line1
3:1c
 This is line1 with some change

So kann die Ausgabe in diesem Fall als:

  • Die Änderung befindet sich in file3
  • Sowohl file1 als auch file2 enthalten als erste Zeile „This is line1“.
  • Während die Datei3 als erste Zeile „This is line1 with some changes“ enthält.

Das war alles darüber, wie sich diff3-Berichte in den Zeilen ändern. Nun lassen Sie uns sehen, wie sich diff3 verhält, wenn eine der Dateien eine zusätzliche Zeile enthält:

Während die Datei1 und Datei2 gleich bleiben, ist hier die Datei3:

This is line1
This is line2
This is line3
This is line4

Wie aus dem Inhalt ersichtlich, enthält file3 nun eine zusätzliche Zeile am Ende.

Lassen Sie uns den gleichen Befehl diff3 ausführen:

diff3 file1 file2 file3

Und hier ist die Ausgabe, die der Befehl erzeugt:

====3
1:3a
2:3a
3:4c
 This is line4

Die Ausgabe beginnt mit dem Hinweis, dass sich die Änderung in der Datei3 befindet. Die Änderung erfolgt in der vierten Zeile von file3 (3:4c), die im Vergleich zu file1 und file2 insgesamt eine neue Zeile ist.

Was wir bisher besprochen haben, waren einige einfache Fälle. Nehmen wir ein paar leicht komplexe Situationen. Betrachten Sie beispielsweise file1, file2 und file3 als die folgenden Elemente:

This is line1
This is line2 with some change
This is line3
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3 with some change

So enthalten nun sowohl file1 als auch file2 Änderungen, und das auch in verschiedenen Zeilen. Mal sehen, was diff3 in diesem Fall produziert:

====
1:2,3c
 This is line2 with some change
 This is line3
2:2,3c
 This is line2
 This is line3
3:2,3c
 This is line2
 This is line3 with some change

Wie Sie in der oben gezeigten Ausgabe sehen können, enthält die erste Zeile keine Zahl. Das liegt daran, dass nicht eine, sondern mehrere Dateien jetzt Änderungen enthalten. Für diff3 sind die Zeilen 2 und 3 aller drei Dateien nun unterschiedlich. Aus diesem Grund enthält die Ausgabe statt einer einzelnen Zahl nach dem Doppelpunkt (:) nun einen Bereich -‚2,3‘, also Zeile 2 bis Zeile 3.

Nehmen wir noch ein weiteres Beispiel. Angenommen, die drei Dateien enthalten diesmal die folgenden Informationen:

This is line1
This is line2
This is line3
This is line4
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3
This is line4
This is line5

Wenn nun der Befehl diff ausgeführt wird, erzeugt er die folgende Ausgabe:

====
1:4c
 This is line4
2:3a
3:4,5c
 This is line4
 This is line5

Hier, wenn Sie versuchen zu verstehen, sagt der Befehl diff3, dass die Änderungen nach Zeile 3 in allen drei Dateien liegen. Während file1 die Zeile „This is line4“ als vierte Zeile enthält, enthält file3 „This is line4“ und „This is line5“ als vierte bzw. fünfte Zeile. Die Datei2 hingegen hat nur 3 Zeilen.

Das war also alles über die grundlegende Arbeit an diff3. Was es auch wert ist, hier‘, was die offizielle Dokumentation über das Werkzeug sagt: „Sie können den diff3Befehl verwenden, um Unterschiede zwischen drei Dateien anzuzeigen. Wenn zwei Personen unabhängige Änderungen an einem gemeinsamen Original vorgenommen haben, diff3können sie die Unterschiede zwischen dem Original und den beiden geänderten Versionen melden und eine zusammengeführte Datei erzeugen, die die Änderungen beider Personen zusammen mit Warnungen vor Konflikten enthält“.

Fazit

Wir haben hier gerade die Oberfläche verkratzt, Diff3 ist in der Lage, viel mehr zu tun. Wie beispielsweise auch in der offiziellen Dokumentation erwähnt, können Sie damit auch Änderungen zusammenführen. Außerdem gibt es viele Befehlszeilenoptionen, mit denen Sie die Ausgabe des Befehls anpassen und auf einige andere Funktionen zugreifen können. Es steht alles auf der Manpage, gehen Sie es durch.

Das könnte Dich auch interessieren …