Android

Diff Befehl unter Linux

How To use diff command in Linux Or Ubuntu Step By Step Tutorial

How To use diff command in Linux Or Ubuntu Step By Step Tutorial

Inhaltsverzeichnis:

Anonim

diff ist ein Befehlszeilenprogramm, mit dem Sie zwei Dateien zeilenweise vergleichen können. Es kann auch den Inhalt von Verzeichnissen vergleichen.

Der Befehl diff wird am häufigsten zum Erstellen eines Patches verwendet, der die Unterschiede zwischen einer oder mehreren Dateien enthält, die mit dem Befehl patch angewendet werden können.

So verwenden Sie den Befehl diff

Die Syntax für den Befehl diff lautet wie folgt:

diff… FILES

Der Befehl diff kann die Ausgabe in verschiedenen Formaten anzeigen, wobei das normale, das kontextbezogene und das vereinheitlichte Format die häufigsten sind. Die Ausgabe enthält Informationen darüber, welche Zeilen in den Dateien geändert werden müssen, damit sie identisch werden. Wenn die Dateien übereinstimmen, wird keine Ausgabe erstellt.

Verwenden Sie den Umleitungsoperator, um die Befehlsausgabe in einer Datei zu speichern:

diff file1 file2 > patch

Wir verwenden die folgenden zwei Dateien, um die Funktionsweise des Befehls diff zu erläutern:

file1

Ubuntu Arch Linux Debian CentOS Fedora file2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Normales Format

In der einfachsten Form wird beim Ausführen des Befehls diff für zwei Textdateien ohne Option eine Ausgabe im normalen Format erstellt:

diff file1 file2

Die Ausgabe sieht ungefähr so ​​aus:

0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos

Das normale Ausgabeformat besteht aus einem oder mehreren Abschnitten, die die Unterschiede beschreiben. Jeder Abschnitt sieht folgendermaßen aus:

change-command < from-file-line… --- > to-file-line…

0a1 , 2d2 und 4c4, 5 sind Änderungsbefehle. Jeder Änderungsbefehl enthält von links nach rechts Folgendes:

  • Die Zeilennummer oder der Zeilenbereich in der ersten Datei. Ein spezielles Änderungszeichen. Die Zeilennummer oder der Zeilenbereich in der zweiten Datei.

Das Änderungszeichen kann eines der folgenden sein:

  • a - Fügen Sie die Zeilen hinzu. c - Ändern Sie die Zeilen. d - Löschen Sie die Zeilen.

Dem Änderungsbefehl folgen die vollständigen Zeilen, die entfernt ( < ) und der Datei hinzugefügt ( > ) werden.

Lassen Sie uns die Ausgabe erklären:

  • 0a1 - Fügen Sie Zeile 1 der zweiten Datei am Anfang der Datei1 (nach der Zeile 0 ) hinzu.
    • > Kubuntu - Die Zeile aus der zweiten Zeile, die wie oben beschrieben zur ersten Datei hinzugefügt wird.
    2d2 - Löschen Sie Zeile 2 in der ersten Datei. Das 2 nach dem d Symbol bedeutet, dass die Zeile in der zweiten Datei in Zeile 2 angezeigt wird, wenn sie nicht gelöscht wird.
    • < Arch Linux - die gelöschte Zeile.
    4c4, 5 - Ersetzen Sie Zeile 5 in der ersten Datei durch die Zeilen 4-5 aus der zweiten Datei.
    • < CentOS - Die Zeile in der ersten zu ersetzenden Datei. --- - Trennzeichen. > Arch Linux und > Centos - Zeilen aus der zweiten Datei, wobei die Zeile in der ersten Datei ersetzt wird.

Kontextformat

Wenn das Kontextausgabeformat verwendet wird, zeigt der Befehl diff mehrere Kontextzeilen um die Zeilen an, die sich zwischen den Dateien unterscheiden.

Die Option -c weist diff an, Ausgaben im Kontextformat zu erzeugen:

diff -c file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Die Ausgabe beginnt mit den Namen und Zeitstempeln der verglichenen Dateien und einem oder mehreren Abschnitten, die die Unterschiede beschreiben. Jeder Abschnitt sieht folgendermaßen aus:

*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…

  • from-file-line-numbers und to-file-line-numbers - Die Zeilennummern oder durch Kommas getrennten Zeilenbereiche in der ersten bzw. zweiten Datei. from-file-line und to-file-line - Die Zeilen, die sich unterscheiden, und die Kontextzeilen:
    • Zeilen, die mit zwei Leerzeichen beginnen, sind Kontextzeilen. Die Zeilen, die in beiden Dateien mit dem Minuszeichen ( - ) beginnen, sind die Zeilen, die nichts in der zweiten Datei entsprechen. In der zweiten Datei fehlen Zeilen. Zeilen, die mit dem Pluszeichen ( + ) beginnen, sind die Zeilen, die nichts in der ersten Datei entsprechen. In der ersten Datei fehlen Zeilen. Zeilen, die mit dem Ausrufezeichen ( ! ) Beginnen, sind die Zeilen, die zwischen zwei Dateien geändert werden. Jede Zeilengruppe beginnt mit ! aus der ersten Datei hat eine entsprechende Übereinstimmung in der zweiten Datei.

Lassen Sie uns die wichtigsten Teile der Ausgabe erklären:

  • In diesem Beispiel haben wir nur einen Abschnitt, der die Unterschiede beschreibt. *** 1, 6 **** und --- 1, 7 ---- den Bereich der Zeilen aus der ersten und zweiten Datei an, die in diesem Abschnitt enthalten sind. Zeilen Ubuntu , Debian , Fedora und die letzte leere Zeile sind in beiden Dateien gleich. Diese Zeilen beginnen mit doppeltem Leerzeichen.Line - Arch Linux aus der ersten Datei entspricht nichts in der zweiten Datei. Obwohl diese Zeile auch in der zweiten Datei vorhanden ist, unterscheiden sich die Positionen. Zeile + Kubuntu von der zweiten Datei entspricht nichts in der ersten Datei. Zeile ! CentOS ! CentOS aus der ersten Datei und Zeilen ! Arch Linux ! Arch Linux und ! CentOS ! CentOS aus der zweiten Datei werden zwischen den Dateien geändert.

Standardmäßig ist die Anzahl der Kontextzeilen drei. Um eine andere Nummer anzugeben, verwenden Sie die Option -C ( --contexts ):

diff -C 1 file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Einheitliches Format

Das einheitliche Ausgabeformat ist eine verbesserte Version des Kontextformats und erzeugt eine kleinere Ausgabe.

Verwenden Sie die Option -u , um diff , die Ausgabe im einheitlichen Format zu drucken:

diff -u file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora

Die Ausgabe beginnt mit den Namen und Zeitstempeln der Dateien und einem oder mehreren Abschnitten, die die Unterschiede beschreiben. Jeder Abschnitt hat die folgende Form:

*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…

  • @@ from-file-line-numbers to-file-line-numbers @@ - Die Zeilennummer oder der Bereich der Zeilen aus der ersten und zweiten Datei in diesem Abschnitt. line-from-files - Die Zeilen, die sich unterscheiden, und die Kontextzeilen:
    • Zeilen, die mit zwei Leerzeichen beginnen, sind Kontextzeilen. Die Zeilen, die in beiden Dateien gleich sind. Zeilen, die mit dem Minuszeichen ( - ) beginnen, sind die Zeilen, die aus der ersten Datei entfernt werden. Zeilen, die mit dem Pluszeichen ( + ) beginnen, sind die Zeilen, die aus der ersten Datei hinzugefügt werden.

Fall ignorieren

Wie Sie möglicherweise in den obigen Beispielen bemerken, unterscheidet der Befehl diff standardmäßig zwischen Groß- und Kleinschreibung.

Verwenden Sie die Option -i , um diff anzuweisen, Groß- und Kleinschreibung zu ignorieren:

diff -ui file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora

Fazit

Das Vergleichen von Textdateien auf Unterschiede ist eine der häufigsten Aufgaben für Linux-Systemadministratoren.

Der Befehl diff vergleicht Dateien zeilenweise. Für weitere Informationen geben Sie man diff in Ihr Terminal ein.

diff terminal