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
Beschreibung
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.
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: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
- Geben Sie Folgendes ein, um zwei Dateien zu vergleichen:
Zeigt die Unterschiede zwischen den Dateien anchap1.bakundchap1.diff chap1.back chap1 - 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.cWenn sich zwei Zeilen nur in der Anzahl der Leerzeichen und Tabulatoren zwischen Wörtern unterscheiden, werden sie vom Befehl diff -w als identisch betrachtet.
- 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.edDadurch 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.oldDie 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. |