Wie vergleicht Zwei Text-Dateien im Linux Terminal

0
23
Fatmawati Achmad Zaenuri/Shutterstock.com

Müssen finden Sie die Unterschiede zwischen zwei Revisionen einer text-Datei? Dann diff ist der Befehl, den Sie benötigen. Dieses tutorial zeigt Ihnen, wie Sie mit diff unter Linux und macOS, auf einfache Weise.

Tauchen Sie ein in diff

Der Befehl diff vergleicht zwei Dateien und erstellt eine Liste der Unterschiede zwischen den beiden. Um genauer zu sein, erzeugt es eine Liste der änderungen müssten vorgenommen werden, um die erste Datei, um Sie mit der in der zweiten Datei. Wenn Sie halten, dass im Hinterkopf, Sie finden es einfacher zum verstehen der Ausgabe von diff. Der diff-Befehl wurde entworfen, um Unterschiede zu finden zwischen der source code Dateien und erzeugt eine Ausgabe, die gelesen werden konnten und entsprechend gehandelt wird, durch andere Programme, wie den patch-Befehl. In diesem tutorial werden wir uns anschauen am nützlichsten menschlich-freundlichen Möglichkeiten, um mit diff.

Lassen Sie uns Tauchen Sie ein in analysieren und mit zwei Dateien. Die Reihenfolge der Dateien in der Befehlszeile bestimmt, welche Datei-diff-Ansicht, um die “erste Datei” und welche Sie als die “zweite Datei”. Im Beispiel unten alpha1 ist die erste Datei, und alpha2 wird die zweite Datei. Beide Dateien enthalten das phonetische alphabet, aber die zweite Datei, alpha2, hat einige weitere Bearbeitung, so dass die beiden Dateien sind nicht identisch.

Wir vergleichen die Dateien mit diesem Befehl. Typ diff, ein Leerzeichen, der name der ersten Datei ein Leerzeichen, der name der zweiten Datei, und drücken Sie dann die EINGABETASTE.

diff-alpha1-alpha2

Wie zerlegen wir die Ausgabe? Sobald Sie wissen, was zu suchen, es ist nicht so schlimm. Jeder Unterschied wird aufgeführt, wiederum in einer einzelnen Spalte, und jede Differenz gekennzeichnet ist. Die label-Nummern enthält jede Seite eines Briefes, wie 4c4. Die erste Zahl ist die Nummer der Zeile, in alpha1, und die zweite Zahl ist die Nummer der Zeile, in alpha2. Die Buchstaben in der Mitte werden können:

  • c: Die Zeile in der ersten Datei geändert werden muss, um mit der Zeile in der zweiten Datei.
  • d: Die Zeile in der ersten Datei muss gelöscht werden entsprechend der zweiten Datei.
  • a: Zusätzliche Inhalte Hinzugefügt werden müssen, um die erste Datei, um Sie mit der in der zweiten Datei.

Die 4c4 in unserem Beispiel sagen Sie uns, Zeile vier von alpha1 muss entsprechend geändert werden Zeile vier von alpha2. Dies ist der erste Unterschied zwischen den beiden Dateien mit diff gefunden.

Zeilen, die beginnen mit < beziehen sich auf die erste Datei, in unserem Beispiel alpha1, und Zeilen, die beginnen mit ” > ” beziehen sich auf die zweite Datei, alpha2. Die Zeile < Delta sagt uns, dass das Wort Delta ist der Inhalt von Zeile vier im alpha1. Die Zeile > Dave erzählt uns, dass das Wort Dave ist der Inhalt von Zeile vier in alpha2. Um zusammenzufassen, dann müssen wir ersetzen Delta mit Dave auf der Linie vier in alpha1, zu machen, dass die Zeile passen, in beide Dateien.

Die nächste änderung ist gekennzeichnet durch die 12c12. Die Anwendung der gleichen Logik, das sagt uns, dass Linie 12 in alpha1 enthält das Wort Lima, aber die Linie 12 von alpha2 enthält das Wort Linux.

Die Dritte änderung bezieht sich auf eine Linie, die gelöscht worden von alpha2. Das label 21d20 entschlüsselt wird als “line 21″ muss gelöscht werden aus der ersten Datei, um die Dateien synchronisieren aus Linie 20 ab.” Die < Einheitliche Linie zeigt uns den Inhalt der Zeile, die gelöscht werden soll von alpha1.

Der vierte Unterschied ist beschriftet 26a26,28. Diese änderung bezieht sich auf drei zusätzliche Zeilen, die Hinzugefügt wurden, alpha2. Hinweis: der 26,28 in der Bezeichnung. Zwei-Zeilen-Nummern getrennt durch ein Komma steht für eine Reihe von Zeilennummern. In diesem Beispiel wird der Bereich von Zeile 26 bis Zeile 28. Das label interpretiert wird als “in Zeile 26 in der ersten Datei, fügen Sie Zeilen 26 bis 28 von der zweiten Datei.” Gezeigt werden die drei Linien in der alpha2, die Hinzugefügt werden müssen, alpha1. Diese enthalten die Worte, die Eigenart, Seltsame und Charme.

Snappy One-Liners

Wenn Sie alles, was Sie wissen wollen ist, ob zwei Dateien identisch sind, verwenden Sie die -s (Bericht identische Dateien) option.

diff -s alpha1-alpha3

Sie können verwenden Sie die -q (kurz) option, um eine ebenso knappe Anweisung über die beiden Dateien anders ist.

diff -q-alpha1-alpha2

Eine Sache zu beachten ist, dass mit zwei identischen Dateien-q (kurz) option vollständig Muscheln und nicht meldet, überhaupt nichts.

Eine Alternative Ansicht

Die -y (side by side) option, die verwendet ein anderes layout für die Beschreibung der Datei unterschieden. Oft ist es bequemer zu verwenden – ” W ” (Breite) mit der option nebeneinander anzeigen, um die Anzahl der Spalten, die angezeigt werden. Das vermeidet hässliche wrap-around-Linien, dass der Ausgang schwer zu Lesen. Hier haben wir gesagt, diff, um zu produzieren ein side-by-side-display und beschränken die Ausgabe auf 70 Spalten.

diff -y -W-70 alpha1 alpha2

Die erste Datei auf der Befehl-Linie, alpha1, auf der linken Seite angezeigt und in der zweiten Zeile auf der command-line, alpha2, ist auf der rechten Seite angezeigt. Die Zeilen aus jeder Datei angezeigt werden, Seite an Seite. Es gibt Indikator-Zeichen neben diese Zeilen in alpha2, geändert, gelöscht oder Hinzugefügt werden.

  • |: Eine Zeile, die geändert wurde in der zweiten Datei.
  • <: Eine Linie, die gelöscht wurde, von der zweiten Datei.
  • >: Eine Zeile, die Hinzugefügt wurde, um die zweite Datei, die nicht in der ersten Datei.

Wenn Sie lieber ein kompakter side-by-side-Zusammenfassung der Datei Unterschiede, verwenden Sie die –suppress-common-lines-option. Diese Kräfte diff, um die Liste der geänderten, hinzugefügten oder gelöschten Zeilen.

diff -y -W 70 –suppress-common-lines alpha1 alpha2

Fügen Sie einen Spritzer Farbe

Ein anderes Dienstprogramm namens colordiff bringt Farbe hervorheben, um die Ausgabe von diff. Dies macht es viel einfacher zu sehen, welche Zeilen unterschiedlich sein.

Die Verwendung von apt-get zu installieren Sie dieses Paket auf Ihrem system, wenn Sie Ubuntu oder eine andere Debian-basierte distribution. Auf anderen Linux-Distributionen, verwenden Sie Ihre Linux-distribution Paket-management-tool statt.

sudo apt-get install colordiff

Verwenden Sie colordiff so wie mit diff.

In der Tat, colordiff ist ein wrapper für diff und diff macht die ganze Arbeit hinter den kulissen. Weil alle die diff-Optionen wird die Arbeit mit colordiff.

Bietet Einige Kontext

Zu finden eine Art Mittelweg zwischen alle Zeilen in den Dateien, die auf dem Bildschirm angezeigt und nur die geänderten Zeilen aufgeführt sind, können wir Fragen, diff einigen Kontext. Es gibt zwei Möglichkeiten, dies zu tun. Beide Wege das gleiche Ziel zu erreichen, ist zu zeigen, einige Zeilen vor und nach jeder geänderten Zeile. Sie werden in der Lage sein zu sehen, was Los ist in der Datei an der Stelle, wo die Differenz festgestellt wurde.

Die erste Methode verwendet die -c (kopiert Kontext) option.

colordiff -c-alpha1-alpha2

Die diff-Ausgabe hat einen header. Die Kopfzeile listet die beiden Dateinamen und deren Modifikation Zeiten. Es werden Sternchen (*) vor dem Namen der ersten Datei und Bindestriche (-) vor den Namen der zweiten Datei. Sternchen und Strichen werden verwendet, um anzugeben, welche Datei die Zeilen in die Ausgabe gehören.

Eine Zeile von Sternchen mit 1,7 in der Mitte zeigt an, schauen wir uns die Linien von alpha1. Um genau zu sein, sind wir auf der Suche in den Zeilen eins bis sieben. Das Wort Delta gekennzeichnet wird, wie geändert. Es hat ein Ausrufezeichen ( ! ) neben, und es ist rot. Es gibt drei Linien des unveränderten text angezeigt, vor und nach dieser Zeile, so können wir sehen, den Kontext, die Zeile in der Datei.

Die Linie von Strichen mit 1,7 in der Mitte sagt uns, wir sind jetzt auf der Suche in den Zeilen von alpha2. Wieder sind wir auf der Suche in den Zeilen eins bis sieben, mit dem Wort Dave auf Zeile vier gekennzeichnet als andere.

Drei Linien der Rahmen oben und unten wird jede änderung der default-Wert. Sie können angeben, wie viele Zeilen Kontext wollen Sie diff zur Verfügung zu stellen. Um dies zu tun, verwenden Sie die -C (kopiert Kontext) – option mit einem großen “C”, und geben Sie die Anzahl der Zeilen, die Sie möchten:

colordiff -C 2 alpha1 alpha2

Der zweite diff-option, die bietet Zusammenhang ist die-u (unified context) option.

colordiff -u-alpha1-alpha2

Nach wie vor haben wir einen header auf die Ausgabe. Die zwei Dateien benannt werden, und deren änderungsdatum angezeigt werden. Es gibt Bindestriche (-) vor dem Namen der alpha1-und plus-Zeichen (+) vor dem Namen der alpha2. Dies sagt uns, dass Bindestriche werden verwendet, um auf alpha1-und plus-Zeichen werden verwendet, um auf alpha2. Verstreut in der Auflistung sind Zeilen, die beginnen mit at-Zeichen (@). Diese Zeilen markieren den Beginn eines jeden Unterschied. Sie uns auch sagen, welche Zeilen angezeigt, aus jeder Datei.

Gezeigt werden die drei Zeilen vor und nach der Zeile gekennzeichnet als andere, so dass wir sehen können, den Kontext der in der geänderten Zeile. In der einheitlichen Ansicht, die Zeilen mit der Differenz werden angezeigt, eins über dem anderen. Die Linie von alpha1 vorangestellt ist, einem Bindestrich und der Linie von alpha2 ist mit einem vorangestellten plus-Zeichen. Das display erreicht in acht Zeilen, was die kopierten Rahmen display oben nahm fünfzehn zu tun.

Wie man es erwarten würde, können wir Fragen, diff, genau die Anzahl der Zeilen der einheitliche Rahmen, die wir gerne sehen würden. Um dies zu tun, verwenden Sie die -U (unified context) option mit einem großen “U”, und geben Sie die Anzahl der Zeilen, die Sie möchten:

colordiff -U 2 alpha1 alpha2

Ignoriert Leerzeichen und Case

Wir analysieren zwei weitere Dateien, test4 und test5. Diese haben die Namen von sechs Superhelden in Ihnen.

colordiff -y -W 70 test4 test5

Die Ergebnisse zeigen, dass die diff-findet nichts anderes mit der Black Widow, Spider-Man und Thor Linien. Es tut flag änderungen bei den Captain America, Ironman und Der Hulk Linien.

Also, was ist anders? Gut, in test5 Hulk ist die Schreibweise mit den Kleinbuchstaben “h”, und Captain America hat ein zusätzliches Leerzeichen zwischen “Kapitän” und “Amerika.” OK, das ist deutlich 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, die Antwort ist Leerraum. Es gibt fast sicher einen streunenden Raum oder zwei, oder ein tab-Zeichen am Ende der Zeile.

Wenn Sie don ‘ T Angelegenheit für Sie, Sie können anweisen, diff ignorieren bestimmte Typen von der Linie Unterschied, einschließlich:

  • -ich: Ignorieren Unterschiede in der Falle.
  • -Z: Ignoriert nachgestellte Leerzeichen.
  • -b: Ignoriere änderungen in der Menge der weißen Raum.
  • -w: Ignore all white space changes.

Wir bitten diff zu überprüfen, werden diese beiden Dateien wieder, aber dieses mal zu ignorieren Unterschiede in der Falle.

colordiff -i-y -W 70 test4 test5

Die Zeilen mit “Hulk” und “The hulk” sind jetzt als ein Spiel, und kein Unterschied ist vorgemerkt für den Kleinbuchstaben “h” ist. Wir bitten diff zu ignorieren auch Leerraum.

colordiff -i-Z -y -W 70 test4 test5

Wie vermutet, Leerraum gewesen sein muss, der Unterschied auf der Ironman-Linie, weil die diff nicht mehr Flaggen ein Unterschied für die Linie. Das lässt Captain America. Fragen Sie doch mal diff auf ignore case und ignore all white space Fragen.

colordiff -i-w -y -W 70 test4 test5

Durch erzählen, diff ignorieren die Unterschiede, wir sind nicht besorgt, diff sagt uns, dass für unsere Zwecke die Dateien übereinstimmen.

Der diff-Befehl hat viele weitere Optionen, aber die meisten von Ihnen beziehen sich auf die Herstellung maschinenlesbarer Ausgabe. Diese können überprüft werden, auf der Linux-man-Seite. Die Optionen, die wir haben in den obigen Beispielen verwendet wird, aktivieren Sie Sie aufzuspüren alle Unterschiede zwischen den Versionen von text-Dateien, über die Befehlszeile und die menschliche Augäpfel.