AA_PO-22438-123RF-Mike_Flippo__123RF-Die_Gummientchen-Bande_resized.jpg

© Mike Flippo; 123RF

Textdateien mit "diff" und "wdiff" vergleichen

Finde die zehn Unterschiede

Mehrere Versionen derselben Datei werfen die Frage auf, ob diese sich unterscheiden – zumindest für Textdateien bringt die Shell alle Tools mit, die Sie brauchen, um diese Frage zu beantworten.

Es ist schnell passiert: Sie beginnen auf Rechner A, an einer Datei zu arbeiten, dann kopieren Sie die Datei für eine längere Bahnfahrt auf das Notebook B und ändern dort Teile der Datei. Irgendwann kopieren Sie die zweite Fassung auf Rechner A zurück, und nun liegen dort zwei Versionen der Datei. Welche der beiden aktueller ist, können Sie eventuell am Dateidatum erkennen – das hängt davon ab, wie Sie die Dateien zwischen den PCs kopiert haben. Aber für einen Vergleich müssten Sie beide Versionen im Editor öffnen und Absatz für Absatz, Wort für Wort nach Unterschieden suchen.

Diese mühsame Aufgabe nehmen Ihnen in der Shell gleich mehrere Tools ab – im Folgenden geht es um diff, wdiff und das selbst gebastelte Tool ddiff.

"diff" für Programmierer

Ein Klassiker in der Welt der Unix-/Linux-Tools ist das Programm diff, das zwei Dateien zeilenweise vergleicht. Findet es Unterschiede, gibt es diese in einer Form aus, die andere Tools gut weiter verarbeiten können. Für den menschlichen Leser ist das Format eher gewöhnungsbedürftig, dank grafischen Frontends wie tkdiff oder kdiff3 aber handhabbar.

Als Beispiel für die Ausgabe von diff dienen hier die folgenden zwei Dateien v1.txt und v2.txt:

$ cat v1.txt
Erste Zeile
Zweite Zeile
Dritte Zeile
Vierte Zeile
Fuenfte Zeile
$ cat v2.txt
Erste Zeile
Zweite Zeile, geaendert
Dritte Zeile
Fuenfte Zeile
Sechste Zeile

Sie sehen auf Anhieb, was sich von v1.txt zu v2.txt geändert hat: Die zweite Zeile wurde verändert, die vierte ganz entfernt und schließlich am Ende eine neue (sechste) Zeile ergänzt. Rufen Sie nun diff mit den beiden Dateinamen als Argumenten auf, erhalten Sie folgende Ausgabe:

$ diff v1.txt v2.txt
2c2
< Zweite Zeile
---
> Zweite Zeile, geaendert
4d3
< Vierte Zeile
5a5
> Sechste Zeile

Die Zeilen, die mit einem Kleiner- oder Größer-Zeichen beginnen, drücken aus, dass v2.txt aus v1.txt entstanden ist, indem eine Zeile entfernt (<) oder hinzugefügt (>) wurde; die Änderung einer Zeile besteht aus der Kombination von Entfernen und Hinzufügen, wie das Beispiel der geänderten zweiten Zeile zeigt. Über jeder solchen Änderung steht in der diff-Ausgabe noch, an welcher Stelle sie stattgefunden hat; die Buchstaben c, d und a stehen für change (Änderung), deletion (Löschung) und addition (Hinzufügung). Bei der Änderung befindet sich zwischen dem alten und dem neuen Text eine Trennzeile, die aus drei Minuszeichen besteht.

Wer lieber ein grafisches Tool verwendet, kann eines der beiden schon erwähnten Programme tkdiff oder kdiff3 nachinstallieren. Für die Darstellung der Unterschiede verwenden beide Tools farbige Unterlegungen (Abbildung 1), was z. B. für Quellcode- oder Konfigurationsdateien gut funktioniert, bei Textdateien mit umfangreichen Absätzen (die lange Zeilen ohne Umbrüche bilden) aber nicht hilfreich ist – in der Ansicht ist jeweils nur der Anfang jedes Absatzes sichtbar.

Abbildung 1: Das "diff"-Frontend "tkdiff" zeigt Änderungen übersichtlicher an, eignet sich aber nicht für Textdateien mit langen Absätzen.

Zu diff gehört, zumindest für Programmierer, immer auch das Tool patch, denn damit können Sie aus v1.txt und der diff-Ausgabe die Datei v2.txt rekonstruieren. Darum ist es bei Updates möglich, nur die Änderungen am Quellcode (im Vergleich zu einer bereits vorhandenen älteren Version) herunterzuladen, diese mit patch anzuwenden und ab sofort mit der neuen Version zu arbeiten. Der Ausdruck "einen Patch anwenden" kommt hierher.

"wdiff" für Autoren

Wenn Sie Notizen oder längere Texte in einem Editor erstellen, hilft Ihnen diff nur eingeschränkt beim Vergleich zweier Dateiversionen. Hier kommt das zweite Tool, wdiff, ins Spiel: Es vergleicht Wörter (word diff). Wendet man es auf die Beispieldateien von oben an, ergibt sich:

$ wdiff v1.txt v2.txt
Erste Zeile
Zweite [-Zeile-] {+Zeile, geaendert+}
Dritte Zeile
[-Vierte Zeile-]
Fuenfte {+Zeile
Sechste+} Zeile

Auch hier können Sie die Änderungen von der ersten zur zweiten Dateiversion gut verfolgen, die Teile in eckigen Klammern und Minuszeichen wurden entfernt, die Teile in geschweiften Klammern und Pluszeichen ergänzt. Doch wdiff kann viel mehr – es kommt z. B. damit klar, wenn Sie in einer Datei nur Zeilenumbrüche ändern, und es zeigt nicht nur, in welchen Zeilen es Änderungen gibt, sondern gibt die exakten Stellen innerhalb der Zeile aus, die Sie verändert haben. Das funktioniert auch mit sehr langen Zeilen (Absätzen) gut.

Anders als diff gibt wdiff eine vollständige Version der zweiten Datei und dazu die Änderungsmarkierungen aus. Das heißt: Auch wenn Sie identische Dateien vergleichen, sehen Sie diese komplett in der Ausgabe (dann ohne Markierungen). diff gibt bei identischen Dateien gar nichts aus.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 2 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • The Answer Girl
    Solange man online ist, halten sich die Sprachprobleme in Grenzen: Web-Wörterbücher wie dict.leo.org helfen in meistens akzeptabler Geschwindigkeit über die Hürden des fehlenden (Englisch-) Wortschatzes hinweg. Doch wehe, man ist weder mit Standleitung noch Flatrate gesegnet: Schon ärgert man sich, das Regal mit den papiernen Wörterbüchern am anderen Ende des Raums aufgestellt zu haben.
  • Zu Befehl: diff, diff3, patch
    Finden Sie die Unterschiede – die Programme diff und diff3 aus dem Paket diffutils helfen beim Vergleichen von Textdateien, zeigen eventuelle Abweichungen auf der Kommandozeile an und gleichen die Dateien auf Wunsch vollautomatisch an.
  • Diffutils
    Textdateien miteinander vergleichen, die Unterschiede herausfinden und anzeigen, ja sogar der automatische Abgleich der Dateien – das alles bieten die Diffutils auf der Kommandozeile.
  • Zu Befehl
    Zu Vergleichen gibt es immer wieder etwas. Im Falle von Textdateien eignet sich das Kommandozeilen-Tool diff für diese Aufgabe.
  • Angetestet
Kommentare

Infos zur Publikation

EL 11/2017-01/2018: Einstieg in Linux

Digitale Ausgabe: Preis € 9,80
(inkl. 19% MwSt.)

EasyLinux erscheint vierteljährlich und kostet 9,80 Euro. Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 33,30 Euro. Details dazu finden Sie im Computec-Shop.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!      

Stellenmarkt

Aktuelle Fragen

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 3 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...