Befehl diff

Zweck

Vergleicht Textdateien.

Syntax

Inhalte zweiter Dateien vergleichen

Diff [ -c| -C Zeilen | -D [ Zeichenfolge ] | -e | -f | -n | -u | -U Zeilen ] [ -b ] [ -i ] [ -t. ] [ -w ] File1 File2

diff [ -h ] [ -b ] File1 File2

Inhalts von Verzeichnissen sortieren und unterschiedliche Dateien vergleichen

Diff [ -c | -C Zeilen | -e | -f | -n | -u | -U Zeilen ] [ -b ] [ -i ] [ -l ] [ -r ] [ -s ] [ -S Datei ] [ -t. ] [ -w ] Directory1 Directory2

diff [ -h ] [ -b ] Directory1 Directory2

Beschreibung

Der Befehl diff vergleicht Textdateien. Es kann einzelne Dateien oder die Inhalte von Verzeichnissen vergleichen.
Hinweis Der Befehl diff funktioniert nur mit Eingabedateien, bei denen es sich um Textdateien handelt.

Wenn die Parameter Verzeichnis1 und Verzeichnis2 angegeben werden, vergleicht der Befehl diff gleichnamige Textdateien in den beiden Verzeichnissen. Unterschiedliche Binärdateien, gemeinsame Unterverzeichnisse und Dateien, die nur in einem der beiden Verzeichnisse vorhanden sind, werden aufgelistet.

Wenn der Befehl diff für reguläre Dateien ausgeführt wird und wenn unterschiedliche Textdateien während des Verzeichnisgleichs verglichen werden, zeigt der Befehl diff an, welche Zeilen in den Dateien geändert werden müssen, damit sie übereinstimmen. Wenn weder der Parameter Datei1 noch der Parameter Datei2 ein Verzeichnis ist, kann für beide ein Minuszeichen (-) angegeben werden. In diesem Fall wird die Standardeingabe verwendet. Wenn der Parameter Datei1 ein Verzeichnis ist, wird eine Datei in diesem Verzeichnis verwendet, deren Dateiname mit dem Parameter Datei2 übereinstimmt.

Die typische Ausgabe enthält Zeilen mit den folgenden Formaten:

Lines Affected in File1   Action        Lines Affected in File2
Number1                   a             Number2[,Number3]
Number1[,Number2]         d             Number3
Number1[,Number2]         c             Number3[,Number4] 

Diese Zeilen gleichen ed-Unterbefehlen zum Konvertieren von Datei1in Datei2. Die Nummern vor den Aktionsbuchstaben beziehen sich auf Datei1, die Nummern hinter den Aktionsnamen auf Datei2. Somit können Sie durch Austauschen von d durch a und Lesen von von rechts nach links auch erkennen, wie Datei2 in Datei1 konvertiert wird. Wie im Befehl ed werden identische Paare (Nummer1 = Nummer2) als einzelne Nnummer abgekürzt.

Nach jeder dieser Zeilen zeigt der Befehl Diff alle betroffenen Zeilen in der ersten Datei mit einem vorangestellten <: (Kleiner-als-Zeichen, Doppelpunkt) an. Anschließend werden alle betroffenen Zeilen in der zweiten Datei mit einem vorangestellten > (Größer-als-Zeichen) angezeigt.

Der Exitwert 0 zeigt an, dass keine Unterschiede vorliegen, 1, dass Unterschiede gefunden wurden, und 2, dass ein Fehler aufgetreten ist.

Hinweis: Wenn mehrere Flags -c, -C, -D, -e, -foder -n, -uoder -U angegeben werden, hat das letzte in der Befehlszeile Vorrang. Das System gibt keine Fehlernachricht aus.

Flags

Element Beschreibung
-b Bewirkt, dass jede Anzahl von Leerzeichen am Ende einer Zeile als einzelnes Zeilenvorschubzeichen behandelt wird (die Leerzeichen vor dem Zeilenvorschubzeichen werden ignoriert), und andere Zeichenfolgen von Leerzeichen, die keine Zeilenvorschubzeichen enthalten, werden gleich verglichen.
-C Zeilen Erzeugt einen diff-Befehlsvergleich mit einer Anzahl von Zeilen des kopierten Kontextes, die dem mit der Variablen Zeilen angegebenen Wert entspricht. Das Flag -C ändert die Ausgabe geringfügig. Die Ausgabe beginnt mit der Identifikation der beteiligten Dateien und deren Erstellungsdatum. Jede Änderung wird durch eine Zeile mit einem Dutzend getrennt*(Sterne). Die aus File1 entfernten Zeilen sind mit einem-(Minuszeichen) Die zu File2 hinzugefügten Dateien sind mit einem+(Pluszeichen). Zeilen, die von einer Datei zur anderen geändert wurden, werden in beiden Dateien mit einem!(Ausrufezeichen). Änderungen, die sich innerhalb der angegebenen kopierten Kontextzeilen befinden, werden als Ausgabe gruppiert.
-c Erzeugt einen diff-Befehlsvergleich mit drei Zeilen kopiertem Kontext. Das Flag -C ändert die Ausgabe geringfügig. Die Ausgabe beginnt mit der Identifikation der beteiligten Dateien und deren Erstellungsdatum. Jede Änderung wird durch eine Zeile mit einem Dutzend getrennt*(Sterne). Die aus File1 entfernten Zeilen sind mit einem-(Minuszeichen) Die zu File2 hinzugefügten Dateien sind mit einem+(Pluszeichen). Zeilen, die von einer Datei zur anderen geändert wurden, werden in beiden Dateien mit einem!(Ausrufezeichen). Änderungen, die sich innerhalb der angegebenen kopierten Kontextzeilen befinden, werden als Ausgabe gruppiert.
-D [ Zeichenfolge ] Bewirkt, dass der Befehl diff Befehl eine zusammengeführte Version von Datei1 und Datei2 in der Standardausgabe erstellt. Die Steuerelemente des C-Vorprozessors werden eingeschlossen, damit eine Kompilierung des Ergebnisses ohne Definition von Zeichenfolge der Kompilierung von Datei1 entspricht, während die Definion von ZeichenfolgeDatei2 ergibt.
-E Erzeugt eine Ausgabe in einem Format, das im Editor ed für die Konvertierung von Datei1 in Datei2 verwendet werden kann. Wenn Sie dieses Flag verwenden, kann das folgende Shell-Programm dabei helfen, mehrere Versionen einer Datei zu verwalten. Nur eine Vorgängerdatei ($1) und eine Kette von Version-zu-Version T-Scripts ($2, $3, ...) mit dem Befehl diff muss vorhanden sein. Die neueste Version wird in der Standardausgabe wie folgt angezeigt:
(shift; cat $*; echo '1,$p') | ed - $1
Der Ausgabe werden zusätzliche Befehle hinzugefügt, wenn das Flag -e zum Vergleichen von Verzeichnissen verwendet wird. Das Ergebnis ist ein Shell-Script, das Textdateien, die in beiden Verzeichnissen vorkommen, aus dem Zustand in Verzeichnis1 in den Zustand in Verzeichnis2 konvertieren.
Anmerkung: Das Bearbeiten von Scripts, die von den Flags -e oder -f erzeugt werden, kann keine Zeilen erstellen, die aus einem einzigen bestehen. (Punkt).
-F Erzeugt eine Ausgabe in einem Format, das für den Editor ed nicht geeignet ist, und zeigt die Änderungen an, die erforderlich sind, um Datei1 in Datei2 in umgekehrter Reihenfolge zu konvertieren, die vom Flag -e erzeugt wurde.
-H Führt einen alternativen Vergleich durch, der möglicherweise schneller ist, wenn die geänderten Abschnitte kurz und gut voneinander getrennt sind. Das Flag -h funktioniert mit Dateien beliebiger Länge. Die Flags -c, -C, -D, -e, -f und -n können nicht mit dem Flag -h verwendet werden. Alle anderen Flags mit Ausnahme des Flags -b werden ignoriert, wenn sie mit dem Flag -h verwendet werden.
-i Ignoriert die Groß-/Kleinschreibung. Ein kleines a wird beispielsweise wie ein großes A behandelt.
-l Gibt das lange Ausgabeformat an. Jedes Ergebnis eines Textvergleichs mit dem Befehl diff wird über den Befehl pr zur Seitenaufteilung weitergeleitet. Andere Unterschiede werden gespeichert und zusammengefasst, nachdem alle Textdateidifferenzen berichtet wurden.
-N Erzeugt eine Ausgabe, die der des Flags -e gleicht, aber in der umgekehrten Reihenfolge und mit der Anzahl der geänderten Zeilen bei jedem Einfüge- oder Löschbefehl. Dies ist das Format, das vom Revision Control System (RCS) verwendet wird.
-r Bewirkt die rekursive Anwendung des Befehls diff auf allgemeine gefundene Unterverzeichnisse.
-s Berichtet Dateien, die identisch sind und sonst nicht erwähnt werden.
-S [ Datei ] Ignoriert Dateien, deren Namen vor der mit der Variablen Datei angegebenen Datei einsortiert werden, wenn Verzeichnisse verglichen werden. Das Flag -S gilt nur für Verzeichnisse, die mit den Parametern Verzeichnis1 und Verzeichnis2 angegeben sind. Wenn Sie das Flag -r mit dem Flag -S verwenden, arbeitet das Flag -S nicht rekursiv in den Unterverzeichnissen Verzeichnis1 und Verzeichnis2.
-T Erweitert Tabulatoren in Ausgabezeilen. In der Standardausgabe und in der mit dem Flag -c erzeugten Ausgabe werden am Anfang jeder Zeile Zeichen hinzugefügt, was sich auf die Einrückung der ursprünglichen Quellenzeilen auswirkt und die Intepretation der Ausgabeliste erschwert. Bei der Verwendung dieses Flags wird die Einrückung der ursprünglichen Quelle beibehalten.
-u Erzeugt einen diff-Befehlsvergleich mit drei Zeilen eines einheitlichen Kontexts.

Die Ausgabe gleicht der des Flags -c, abgesehen davon, dass die Kontextzeilen nicht wiederholt werden. Stattdessen werden der Kontext, die gelöschten Zeilen und hinzugefügte Zeilen zusammen verschachtelt angezeigt.

-U Linien Erzeugt einen diff-Befehlsvergleich mit einer Anzahl von Zeilen einheitlichen Kontextes, die dem mit der Variablen Zeilen angegebenen Wert entspricht. Die Ausgabe gleicht der des Flags -c, abgesehen davon, dass die Kontextzeilen nicht wiederholt werden. Stattdessen werden der Kontext, die gelöschten Zeilen und hinzugefügte Zeilen zusammen verschachtelt angezeigt.
-w Ignoriert alle Leerzeichen und Tabulatorzeichen und behandelt alle anderen Zeichenfolgen von Leerzeichen als identisch. Beispiel:if ( a == b )vergleicht gleich mitif(a==b).

Exitstatus

Dieser Befehl gibt die folgenden Exitwerte zurück:

Element Beschreibung
0 Es wurden keine Unterschiede gefunden.
1 Es wurden Unterschiede gefunden.
>1 Es ist ein Fehler aufgetreten.

Beispiele

  1. Geben Sie Folgendes ein, um zwei Dateien zu vergleichen:
    diff chap1.back chap1
    Zeigt die Unterschiede zwischen den Dateien anchap1.bakundchap1.
  2. Geben Sie Folgendes ein, um zwei Dateien zu vergleichen und dabei Unterschiede in der Größe des Leerraums zu ignorieren:
    diff  -w prog.c.bak prog.c
    Wenn sich zwei Zeilen nur in der Anzahl der Leerzeichen und Tabulatoren zwischen Wörtern unterscheiden, werden sie vom Befehl diff -w als identisch betrachtet.
  3. Geben Sie Folgendes ein, um eine Datei zu erstellen, die Befehle enthält, mit denen der Befehl ed eine Datei aus einer anderen wiederherstellen kann:
    diff  -e chap2 chap2.old >new.to.old.ed
    Dadurch wird eine Datei mit dem Namennew.to.old.edEnthält die zu ändernden Unterbefehle ed .chap2zurück in die Version des Textes inchap2.old. In den meisten Fällennew.to.old.edist eine viel kleinere Datei alschap2.old. Sie können Plattenspeicherplatz sparen, indem Siechap2.oldund Sie können sie jederzeit wiederherstellen, indem Sie Folgendes eingeben:
    (cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
    Die Befehle in runden Klammern fügen1,$pbis zum Ende der Editierbefehle, die an den ed -Editor gesendet wurden. Der1,$pBewirkt, dass der Befehl ed die Datei nach der Bearbeitung in die Standardausgabe schreibt. Diese geänderte Befehlsfolge wird dann über eine Pipe zum Befehl ed geleitet (| ed), und der Editor liest es als Standardeingabe. Das Flag - bewirkt, dass der Befehl ed die Dateigröße und andere zusätzliche Informationen nicht anzeigt, da sie mit dem Text vonchap2.old.

Dateien

Element Beschreibung
/usr/bin/diff Enthält den Befehl diff.