Fatmawati Achmad Zaenuri / Shutterstock.com
Müssen Sie die Unterschiede zwischen zwei Revisionen einer Textdatei erkennen? Dann diff
ist der Befehl, den Sie brauchen. Dieses Tutorial zeigt Ihnen, wie man es benutzt diff
unter Linux und MacOS der einfache Weg.
Eintauchen in diff
Das diff
Der Befehl vergleicht zwei Dateien und erstellt eine Liste der Unterschiede zwischen den beiden. Um genauer zu sein, wird eine Liste der Änderungen erstellt, die an der ersten Datei vorgenommen werden müssten, damit sie mit der zweiten Datei übereinstimmt. Wenn Sie dies berücksichtigen, fällt es Ihnen leichter, die Ausgabe von zu verstehen diff
. Das diff
Der Befehl wurde entwickelt, um Unterschiede zwischen Quellcodedateien zu finden und eine Ausgabe zu erstellen, die von anderen Programmen wie dem gelesen und verarbeitet werden kann Patch Befehl. In diesem Tutorial werden wir uns die nützlichsten menschenfreundlichen Verwendungsmöglichkeiten ansehen diff
.
Lassen Sie uns gleich eintauchen und zwei Dateien analysieren. Die Reihenfolge der Dateien in der Befehlszeile bestimmt, welche Datei diff
betrachtet die «erste Datei» und die «zweite Datei». Im folgenden Beispiel ist alpha1 die erste Datei und alpha2 die zweite Datei. Beide Dateien enthalten die phonetisches Alphabet Die zweite Datei, alpha2, wurde jedoch weiter bearbeitet, sodass die beiden Dateien nicht identisch sind.
Wir können die Dateien mit diesem Befehl vergleichen. Art diff
, ein Leerzeichen, den Namen der ersten Datei, ein Leerzeichen, den Namen der zweiten Datei, und drücken Sie die Eingabetaste.
diff alpha1 alpha2

Wie zerlegen wir diese Ausgabe? Sobald Sie wissen, wonach Sie suchen müssen, ist es nicht so schlimm. Jeder Unterschied wird nacheinander in einer einzelnen Spalte aufgelistet und jeder Unterschied ist gekennzeichnet. Das Etikett enthält Zahlen auf beiden Seiten eines Buchstabens, wie z 4c4
. Die erste Nummer ist die Zeilennummer in Alpha1 und die zweite Nummer ist die Zeilennummer in Alpha2. Der Buchstabe in der Mitte kann sein:
- c: Die Zeile in der ersten Datei muss geändert werden, damit sie mit der Zeile in der zweiten Datei übereinstimmt.
- d: Die Zeile in der ersten Datei muss gelöscht werden, damit sie mit der zweiten Datei übereinstimmt.
- ein: Der ersten Datei muss zusätzlicher Inhalt hinzugefügt werden, damit sie mit der zweiten Datei übereinstimmt.
Das 4c4
In unserem Beispiel sagen Sie uns, dass Zeile vier von Alpha1 geändert werden muss, um mit Zeile vier von Alpha2 übereinzustimmen. Dies ist der erste Unterschied zwischen den beiden Dateien, die diff
gefunden.
Zeilen, die mit beginnen <
Verweisen Sie auf die erste Datei in unserem Beispiel alpha1 und die Zeilen, die mit beginnen >
Siehe die zweite Datei, alpha2. Die Linie < Delta
sagt uns, dass das Wort Delta der Inhalt der vierten Zeile in alpha1 ist. Die Linie > Dave
sagt uns, dass das Wort Dave der Inhalt von Zeile vier in Alpha2 ist. Zusammenfassend müssen wir Delta in Zeile 4 in Alpha1 durch Dave ersetzen, damit diese Zeile in beiden Dateien übereinstimmt.
Die nächste Änderung wird durch die angezeigt 12c12
. Unter Anwendung der gleichen Logik sagt uns dies, dass Zeile 12 in Alpha1 das Wort Lima enthält, Zeile 12 von Alpha2 jedoch das Wort Linux.
Die dritte Änderung bezieht sich auf eine Zeile, die aus alpha2 gelöscht wurde. Das Etikett 21d20
wird entschlüsselt als «Zeile 21 muss aus der ersten Datei gelöscht werden, damit beide Dateien ab Zeile 20 synchronisiert werden.» Das < Uniform
Zeile zeigt uns den Inhalt der Zeile, die aus alpha1 gelöscht werden muss.
Der vierte Unterschied ist gekennzeichnet 26a26,28
. Diese Änderung bezieht sich auf drei zusätzliche Zeilen, die zu alpha2 hinzugefügt wurden. Beachten Sie das 26,28
auf dem Etikett. Zweizeilige Zahlen, die durch ein Komma getrennt sind, stehen für einen Bereich von Zeilennummern. In diesem Beispiel reicht der Bereich von Zeile 26 bis Zeile 28. Die Bezeichnung wird interpretiert als «Fügen Sie in Zeile 26 in der ersten Datei die Zeilen 26 bis 28 aus der zweiten Datei hinzu». Wir sehen die drei Zeilen in Alpha2, die zu Alpha1 hinzugefügt werden müssen. Diese enthalten die Wörter Quirk, Strange und Charm.
Bissige Einzeiler
Wenn Sie nur wissen möchten, ob zwei Dateien identisch sind, verwenden Sie die -s
Option (identische Dateien melden).
diff -s alpha1 alpha3

Du kannst den … benutzen -q
(kurze) Option, um eine gleich knappe Aussage darüber zu erhalten, dass zwei Dateien unterschiedlich sind.
diff -q alpha1 alpha2

Eine Sache, auf die Sie achten müssen, ist, dass bei zwei identischen Dateien die-q
Die (kurze) Option ist völlig durcheinander und meldet überhaupt nichts.
Eine alternative Sichtweise
Das -y
Die Option (nebeneinander) verwendet ein anderes Layout, um die Dateiunterschiede zu beschreiben. Es ist oft bequem, die zu verwenden -W
Option (Breite) mit nebeneinander angeordneter Ansicht, um die Anzahl der angezeigten Spalten zu begrenzen. Dies vermeidet hässliche Umlaufzeilen, die das Lesen der Ausgabe erschweren. Hier haben wir erzählt diff
um eine nebeneinander angezeigte Anzeige zu erzeugen und die Ausgabe auf 70 Spalten zu beschränken.
diff -y -W 70 alpha1 alpha2

Die erste Datei in der Befehlszeile, alpha1, wird links und die zweite Zeile in der Befehlszeile, alpha2, rechts angezeigt. Die Zeilen aus jeder Datei werden nebeneinander angezeigt. Neben den Zeilen in Alpha2 befinden sich Indikatorzeichen, die geändert, gelöscht oder hinzugefügt wurden.
- |: Eine Zeile, die in der zweiten Datei geändert wurde.
- <: Eine Zeile, die aus der zweiten Datei gelöscht wurde.
- >: Eine Zeile, die der zweiten Datei hinzugefügt wurde, die nicht in der ersten Datei enthalten ist.
Wenn Sie eine kompaktere Zusammenfassung der Dateidifferenzen nebeneinander bevorzugen, verwenden Sie die --suppress-common-lines
Möglichkeit. Dies zwingt diff
um nur die geänderten, hinzugefügten oder gelöschten Zeilen aufzulisten.
diff -y -W 70 --suppress-common-lines alpha1 alpha2

Fügen Sie einen Farbtupfer hinzu
Ein anderes Dienstprogramm namens colordiff
Fügt der Farbe Hervorhebungen hinzu diff
Ausgabe. Dies macht es viel einfacher zu erkennen, welche Linien Unterschiede aufweisen.
Verwenden apt-get
um dieses Paket auf Ihrem System zu installieren, wenn Sie Ubuntu oder eine andere Debian-basierte Distribution verwenden. Verwenden Sie bei anderen Linux-Distributionen stattdessen das Paketverwaltungstool Ihrer Linux-Distribution.
sudo apt-get install colordiff
Verwenden colordiff
so wie du es benutzen würdest diff
.

Tatsächlich, colordiff
ist ein Wrapper für diff
, und diff
erledigt die ganze Arbeit hinter den Kulissen. Aus diesem Grund alle diff
Optionen funktionieren mit colordiff
.

Bereitstellung von Kontext
Um einen Mittelweg zwischen der Anzeige aller Zeilen in den Dateien auf dem Bildschirm und der Auflistung nur der geänderten Zeilen zu finden, können wir fragen diff
einen Kontext zur Verfügung stellen. Es gibt zwei Möglichkeiten, dies zu tun. Beide Methoden erreichen den gleichen Zweck, nämlich einige Zeilen vor und nach jeder geänderten Zeile anzuzeigen. Sie können sehen, was in der Datei an der Stelle vor sich geht, an der der Unterschied festgestellt wurde.
Die erste Methode verwendet die -c
Option (kopierter Kontext).
colordiff -c alpha1 alpha2

Das diff
Ausgabe hat einen Header. Der Header listet die beiden Dateinamen und ihre Änderungszeiten auf. Es gibt Sternchen (*
) vor dem Namen der ersten Datei und Bindestrichen (-
) vor dem Namen der zweiten Datei. Sternchen und Bindestriche geben an, zu welcher Datei die Zeilen in der Ausgabe gehören.
Eine Reihe von Sternchen mit 1,7 in der Mitte zeigt an, dass wir Linien von Alpha1 betrachten. Um genau zu sein, betrachten wir die Zeilen eins bis sieben. Das Wort Delta wird als geändert markiert. Es hat ein Ausrufezeichen ( !
) daneben und es ist rot. Vor und nach dieser Zeile werden drei Zeilen mit unverändertem Text angezeigt, damit wir den Kontext dieser Zeile in der Datei sehen können.
Die Strichlinie mit 1,7 in der Mitte zeigt an, dass wir jetzt Linien aus Alpha2 betrachten. Wiederum betrachten wir die Zeilen eins bis sieben, wobei das Wort Dave in Zeile vier als unterschiedlich gekennzeichnet ist.
Drei Kontextzeilen über und unter jeder Änderung sind der Standardwert. Sie können angeben, wie viele Kontextzeilen Sie möchten diff
bereitstellen. Verwenden Sie dazu die -C
Option (kopierter Kontext) mit einem Großbuchstaben «C» und geben Sie die Anzahl der Zeilen an, die Sie möchten:
colordiff -C 2 alpha1 alpha2

Der Zweite diff
Option, die Kontext bietet, ist die -u
Option (einheitlicher Kontext).
colordiff -u alpha1 alpha2

Nach wie vor haben wir einen Header am Ausgang. Die beiden Dateien werden benannt und ihre Änderungszeiten werden angezeigt. Es gibt Striche (-
) vor dem Namen von alpha1 und Pluszeichen (+
) vor dem Namen von alpha2. Dies sagt uns, dass Bindestriche verwendet werden, um sich auf Alpha1 zu beziehen, und Pluszeichen, um sich auf Alpha2 zu beziehen. In der gesamten Auflistung sind Zeilen verteilt, die mit Zeichen beginnen (@
). Diese Linien markieren den Beginn jeder Differenz. Sie teilen uns auch mit, welche Zeilen aus jeder Datei angezeigt werden.
Die drei Zeilen vor und nach der als unterschiedlich gekennzeichneten Zeile werden angezeigt, damit wir den Kontext der geänderten Zeile sehen können. In der einheitlichen Ansicht werden die Linien mit dem Unterschied übereinander angezeigt. Vor der Linie von Alpha1 steht ein Bindestrich und vor der Linie von Alpha2 steht ein Pluszeichen. Diese Anzeige erreicht in acht Zeilen, was die oben kopierte Kontextanzeige fünfzehn Mal gedauert hat.
Wie zu erwarten, können wir fragen diff
um genau die Anzahl der Zeilen eines einheitlichen Kontexts bereitzustellen, die wir sehen möchten. Verwenden Sie dazu die -U
(einheitlicher Kontext) Option mit einem Großbuchstaben «U» und geben Sie die Anzahl der gewünschten Zeilen an:
colordiff -U 2 alpha1 alpha2

Leerzeichen und Groß- / Kleinschreibung ignorieren
Lassen Sie uns zwei weitere Dateien analysieren, test4 und test5. Diese haben die Namen sechs Superhelden in sich.
colordiff -y -W 70 test4 test5

Die Ergebnisse zeigen das diff
findet nichts anderes mit den Linien Black Widow, Spider-Man und Thor. Mit den Linien Captain America, Ironman und The Hulk werden Änderungen angezeigt.
Was ist also anders? Nun, in Test 5 wird Hulk mit einem Kleinbuchstaben «h» geschrieben, und Captain America hat ein zusätzliches Leerzeichen zwischen «Captain» und «America». OK, das ist klar zu sehen, aber was ist los mit der Ironman-Linie? Es gibt keine sichtbaren Unterschiede. Hier ist eine gute Faustregel. Wenn Sie es nicht sehen können, lautet die Antwort Leerzeichen. Am Ende dieser Zeile befinden sich mit ziemlicher Sicherheit ein oder zwei verirrte Leerzeichen oder ein Tabulatorzeichen.
Wenn sie dir egal sind, kannst du sie anweisen diff
um bestimmte Arten von Zeilendifferenzen zu ignorieren, einschließlich:
- -ich: Unterschiede im Fall ignorieren.
- -Z: Ignorieren Sie nachgestellte Leerzeichen.
- -b: Ignorieren Sie Änderungen in der Größe des Leerraums.
- -w: Ignoriere alle Leerraumänderungen.
Lassen Sie uns diff bitten, diese beiden Dateien erneut zu überprüfen, diesmal jedoch, um eventuelle Unterschiede zu ignorieren.
colordiff -i -y -W 70 test4 test5

Die Zeilen mit «The Hulk» und «The Hulk» werden jetzt als Übereinstimmung betrachtet, und für Kleinbuchstaben «h» wird kein Unterschied markiert. Lass uns fragen diff
um auch nachgestellte Leerzeichen zu ignorieren.
colordiff -i -Z -y -W 70 test4 test5

Wie vermutet, muss der nachgestellte Leerraum der Unterschied auf der Ironman-Linie gewesen sein, weil diff
kennzeichnet keinen Unterschied mehr für diese Zeile. Das lässt Captain America. Lass uns fragen diff
Groß- und Kleinschreibung ignorieren und Leerraumprobleme ignorieren.
colordiff -i -w -y -W 70 test4 test5

Durch Mitteilen diff
die Unterschiede zu ignorieren, über die wir uns keine Sorgen machen, diff
sagt uns, dass für unsere Zwecke die Dateien übereinstimmen.
Das diff
Befehl hat viel mehr Optionen, aber die meisten davon beziehen sich auf die Erzeugung maschinenlesbarer Ausgaben. Diese können unter Linux überprüft werden Manpage. Mit den Optionen, die wir in den obigen Beispielen verwendet haben, können Sie alle Unterschiede zwischen Versionen Ihrer Textdateien mithilfe der Befehlszeile und menschlicher Augäpfel aufspüren.