(compare two files)
Das Kommando diff vergleicht die Inhalte von datei1 und datei2 und schreibt nach Standard-Ausgabe eine Liste von Änderungen (mit ed-ähnlichen Kommandos), die notwendig sind, um datei1 nach datei2 zu konvertieren. Diese Liste sollte minimal sein. Wenn die Dateien identisch sind, wird keine Ausgabe erzeugt.
Syntax
diff[ option] datei1 datei2 |
Keine Option angegeben Wenn die verglichenen Dateien gleich sind, gibt diff nichts aus. Wenn die verglichenen Dateien Unterschiede aufweisen, gibt diff aus:
Die Ausgabe hat folgendes Format: a 1. n1[,n2] d n1[,n2] c 2. < text einer Zeile aus datei1 . . . - - - 3. > text einer Zeile aus datei2 . . . a, d und c sind ed-ähnliche Kommandos. Sie bedeuten:
Die Ausgabe lesen Sie folgendermaßen: Die ed-Kommandos a, d und c mit den davorstehenden Zeilen(bereichs)angaben zeigen, wie datei1 in datei2 umzuwandeln ist. Wenn Sie a durch d und d durch a ersetzen und die rechts stehenden Zeilen(bereichs)angaben verwenden, sehen Sie, wie datei2 in datei1 umzuwandeln ist. Zeilen aus datei1 sind mit
diff gibt alle Zeilen von datei1 und datei2 aus. Zeilen, die nur in datei1 vorkommen, werden mit einem Strich - gekennzeichnet. Zeilen, die nur in datei2 vorkommen, werden mit einem Pluszeichen + gekennzeichnet. Zeilen, die in beiden Dateien identisch sind, werden mit einem Leerzeichen gekennzeichnet.
diff berücksichtigt weder Leerzeichen und Tabulatorzeichen am Zeilenende, noch unterschiedlich lange Folgen von Leerzeichen innerhalb von Zeilen an derselben Stelle. Leerzeichen am Zeilenanfang werden als Differenz ausgegeben, ebenso Leerzeilen.
diff berücksichtigt Groß- und Kleinschreibung nicht, z.B. wird ’A’ nicht von ’a’ unterschieden.
diff expandiert Tabulatorzeichen in der Ausgabe. Bei Option -c oder normaler Ausgabe fügt diff gelegentlich am Zeilenanfang Zeichen ein, die die Einrückung der ursprünglichen Zeilen verfälschen und dadurch die Interpretation der Ausgabe erschweren. Diese Option erhält die ursprüngliche Einrückung aufrecht.
diff berücksichtigt keine Leer- und Tabulatorzeichen und unterscheidet nicht zwischen verschieden langen Folgen von Leer- und Tabulatorzeichen. Z.B. wird die Zeichenkette 'if Die folgenden Optionen schließen sich gegenseitig aus:
diff erzeugt eine dreiteilige Liste, wobei das Ausgabeformat leicht abgeändert ist. Zuerst werden Namen und Entstehungsdatum von datei1 und datei2 angezeigt. Dann werdendie Kontrastzeilen ausgegeben, wobei die Zeilen, die nicht in datei2 vorkommen, mit einem Minuszeichen - versehen sind, die Zeilen, die nicht in datei1 vorkommen, mit einem Pluszeichen + versehen sind und die Zeilen, die sich in datei1 und datei2 unterscheiden, mit einem Ausrufezeichen ! versehen sind. Zusätzlich werden die drei Zeilen vor und die drei Zeilen hinter den jeweiligen Kontrastzeilen ausgegeben.
diff gibt im gleichen Format aus wie bei der Option -c, zeigt jedoch außer den sich unterscheidenden Stellen auch jeweils zahl Zeilen davor und zahl Zeilen dahinter an.
nicht mit Option -l oder -s zu verwenden! diff erzeugt ein ed-Skript und gibt es aus. Das ed-Skript enthält die Kommandos a, d und c, sowie die zugehörigen Textzeilen, mit denen der Editor ed datei1 in datei2 umwandeln kann. Hierfür muss das ed-Skript an den Editor ed als Eingabe übergeben werden. Vorher müssen allerdings die Anweisungen w und q an das Ende des ed-Skripts geschrieben werden. Außerdem müssen Sie an den Anfang das Kommando e datei1 setzen (siehe ed).
diff erzeugt ein ähnliches Skript wie bei Option -e, nur in der umgekehrten Richtung. Dieses Skript eignet sich aber nicht als Eingabe für ed. Die unter -e und -f erstellten ed-Skripts sind möglicherweise nicht korrekt, wenn die verglichenen Zeilen nur aus einem einzelnen Punkt . bestehen. Die folgenden Optionen beeinflussen die Arbeitsweise von diff:
diff erzeugt, ähnlich wie bei der Option -e, ein Skript. Dort stehen die ed-Kommandos jedoch in umgekehrter Reihenfolge. Außerdem steht hinter jedem Insert- oder Delete-Kommando die Anzahl der zu ändernden Zeilen.
datei1 und datei2 sollten in diesem Fall C-Quellprogramme oder C-Quellprogrammteile enthalten. diff erzeugt ein C-Quellprogramm aus datei1 und datei2, in das es Angaben für den C-Präprozessor einfügt. Wird dieses Programm übersetzt, dann entsteht eine übersetzte datei1, wenn zeichenkette nicht definiert ist. Es ergibt sich eine übersetzte datei2, wenn zeichenkette definiert ist. Die folgenden Optionen werden zum Vergleich von Dateiverzeichnissen verwendet:
diff gibt im langen Format aus. Vor der Ausführung von diff wird jede Textdatei in Seiten zerteilt, indem sie durch eine Pipeline zu pr gesendet wird. Weitere Unterschiede werden gesammelt und am Stück ausgegeben, nachdem alle textspezifischen Unterschiede angezeigt sind.
diff arbeitet rekursiv alle gemeinsamen Unterverzeichnisse ab.
diff zeigt an, welche Dateien übereinstimmen. Standardmäßig unterbleibt dies.
diff bearbeitet ein Verzeichnis erst ab der Datei name. datei1 Namen der Dateien, die diff vergleichen soll. Ist datei1 ein Dateiverzeichnis, dann wird aus diesem Verzeichnis die Datei datei2 für den Vergleich mit datei2 herangezogen. Ist datei2 ein Dateiverzeichnis, dann wird mit datei1 aus diesem Verzeichnis verglichen. Wenn sowohl datei1 als auch datei2 Verzeichnisse sind, sucht diff in beiden Verzeichnissen nach Dateien gleichen Namens und vergleicht diese miteinander. Folgende Dateien werden bei diesem Vergleich jedoch nicht berücksichtigt: blockorientierte Gerätedateien, zeilenorientierte Gerätedateien und FIFO-Dateien. Außerdem vergleicht diff in diesem Fall keine regulären Dateien mit Verzeichnissen. Wenn Sie für datei1 oder datei2 einen Bindestrich - angeben, liest diff die entsprechende Datei von der Standard-Eingabe. Die Eingabedateien müssen in diesem Fall Textdateien sein. |
Endestatus
0 | Dateien sind identisch |
1 | Dateien sind nicht identisch |
>1 | Eingabefehler |
Fehler
Sie haben eine falsche Anzahl Dateien angeben. Es können nur zwei Dateien verglichen werden.
Eine der angegebenen Dateien existiert nicht.
Sie haben kein Leserecht für eine der angegebenen Dateien. |
Variable
TZ bestimmt die Zeitzone, wenn der Dateizeitstempel berechnet wird, der bei den Optionen -C und -c geschrieben wird. |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos diff: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten). LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. LC_TIME Legt das Format der Dateizeitstempels bei den Optionen -C und -c fest. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Beispiel 1
Die Dateien datei1 und datei2 haben folgenden Inhalt: datei1 datei2 Amsel Drossel Amsel und Drossel Fink und Star Fink Star und die ganze Vogelschar Vogelschar Mit dem Aufruf von diff können Sie genau feststellen, in welchen Zeilen sich die beiden Dateien unterscheiden:
Das bedeutet: Um aus datei1 datei2 zu erzeugen, müssen die Zeilen 1 bis 3 aus datei1 (1,3) ersetzt werden (c) durch die Zeilen 1 bis 2 (1,2) aus datei2. Was in diesen Zeilen jeweils steht, ist an den mit |
Beispiel 2
Dateien vergleichen und ein ed-Skript erstellen: Inhalt von datei1: Inhalt von datei2: heute ist Montag heute ist Dienstag es ist kalt es ist Herbst es ist kalt Nach folgendem Aufruf gibt diff die ed-Kommandos aus, mit denen ed datei1 in datei2 umwandeln kann. Um das Resultat dieses Aufruf als Eingabe für den ed benutzen zu können, müssen Sie noch die Anweisungen w und q anfügen (siehe ed).
|
Siehe auch
cmp, comm, ed, pr |