Diff!

Zu Befehl

01.11.2001
,
Zu Vergleichen gibt es immer wieder etwas. Im Falle von Textdateien eignet sich das Kommandozeilen-Tool diff für diese Aufgabe.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, wo es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Das Programm diff vergleicht zwei Textdateien und präsentiert das Ergebnis auf der Konsole. Der Aufruf birgt keine Überraschungen:

$ diff datei1 datei2
 13c13
 < <H1>diff</H1>
 —
 > <H1>Diff!</H1>

Anhand der Trennlinie --- sehen Sie in einem Vorher-Nachher-Szenario, wie eine in datei2 geänderte Zeile (gekennzeichnet mit >) in datei1 aussah (< am Zeilenanfang). diff geht davon aus, dass die zweite Argumentdatei neuer ist als die erste. Die Ausgabe zeigt also, welche Änderungen an datei1 vorgenommen werden müssen, damit datei2 entsteht. Wirklich praktisch ist in diesem Zusammenhang, dass das Programm neu eingefügte Textabschnitte als solche erkennt:

81a82,84
 > </P>
 > <H3>Verschieden oder nicht?</H3>
 > <P>

Die Zeilen vor oder nach dem im Beispiel gezeigten Einschub werden in beiden Dateien als identisch erkannt, obwohl sich die Zeilennummern geändert haben.

Bevor diff eine Veränderung dokumentiert, erklärt das Programm, wo sie stattgefunden hat: 13c13 bedeutet, dass Zeile 13 in der ersten Argumentdatei zu Zeile 13 in der Vergleichsdatei wurde (c für "changed"); 81a82,84 erklärt, dass die Zeilen 82 bis 84 in der neueren Datei auf Zeile 81 in der älteren folgen (a für "append").

Bei längeren Texten kann die Ausgabe der Unterschiede sehr lang werden. Um den Überblick zu behalten, "pipen" Sie den diff-Aufruf in einen Pager Ihrer Wahl, z. B. diff datei1 datei2less, oder leiten die Ausgabe direkt in eine Datei um: diff datei1 datei2 > aenderung.

Verschieden oder nicht?

Um einfach nur herauszufinden, ob sich zwei Dateien unterscheiden, reicht ein diff -q (die Kurzform der Option --brief). Wenn die Files nicht identisch sind, verrät das Programm: Files datei1 and datei2 differ, ansonsten schweigt es.

Mit der Option -c (kurz für --context) sieht das Ergebnis etwas anders aus:

 * datei1 Thu Aug 30 16:24:15 2001
 — datei2 Wed Sep  5 16:24:35 2001
        *
  * 10,16   
   <TD>
   <H4>Zu Befehl</H4>
 ! <H1>diff</H1>
   von Heike Jurzik
   </TD>
   <TD>
 — 10,16 —-
   <TD>
   <H4>Zu Befehl</H4>
 ! <H1>Diff!</H1>
   von Heike Jurzik
   </TD>
   <TD>

Zu jedem Unterschied präsentiert diff die Versionen beider Dateien hintereinander: Die Zeilenangabe für die ältere Datei wird von Sternchen, die des neueren Files mit Strichen umrahmt. Ein Ausrufezeichen am linken Rand weist auf eine veränderte, ein Plus auf eine neue und ein Minus auf eine nicht mehr enthaltene Zeile hin. Anhand der nicht markierten Zeilen lassen sich die Veränderungen leichter im Kontext einordnen. Das obige Beispiel zeigt jeweils die Zeilen 10 bis 16 in den beiden Dateien.

Patch-Dateien enthalten Quelltextänderungen im Unified-Diff-Format. Dies erzeugen Sie mit dem Befehl diff -u datei1 datei2; statt -u können Sie auch --unified schreiben. Auch hier werden die Unterschiede beider Dateien durch Minus- und Pluszeichen gekennzeichnet, tauchen aber direkt hintereinander auf:

— datei1 Thu Aug 30 16:24:15 2001
 +++ datei2 Wed Sep  5 16:42:18 2001
 @@ -10,7 +10,7 @@
  <TD>
  <H4>Zu Befehl</H4>
 -<H1>diff</H1>
 +<H1>Diff!</H1>
  von Heike Jurzik
  </TD>
  <TD>

Das Beispiel zeigt sieben Zeilen einschließlich Zeile 10 in der neuen und der alten Datei.

Um diff abzugewöhnen, auch hinzugekommene oder gelöschte Leerzeilen als Unterschied zu vermerken, benutzt man den Parameter -B (kurz für --ignore-blank-lines). Interessieren Differenzen nicht, die auf eine unterschiedliche Anzahl von Leerzeichen zurückzuführen sind, bekommt das Tool das Flag -b mit auf den Weg. Auch Änderungen bei der Groß- und Kleinschreibung können ignoriert werden: Die passende Option heißt -i (kurz für --ignore-case).

Glossar

Patch

Ein "Flicken", mit der sich der Quellcode einer älteren Software auf eine neuere Version aktualisieren lässt. Zum Einspielen eines Patches auf Quellcode-Ebene wird unter Unix das Programm patch verwendet.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Diffutils
    Textdateien miteinander vergleichen, die Unterschiede herausfinden und anzeigen, ja sogar der automatische Abgleich der Dateien – das alles bieten die Diffutils auf der Kommandozeile.
  • Zu Befehl: diff, diff3, patch
    Finden Sie die Unterschiede – die Programme diff und diff3 aus dem Paket diffutils helfen beim Vergleichen von Textdateien, zeigen eventuelle Abweichungen auf der Kommandozeile an und gleichen die Dateien auf Wunsch vollautomatisch an.
  • Editieren mit dem Vim-Frontend gvim
    Beim Editor vi und seinen Verwandten hört für viele der Spaß in Sachen Komfort und Bedienbarkeit auf. Doch selbst Einsteiger brauchen auf dieses mächtige Werkzeug nicht zu verzichten, denn mit Gvim existiert eine klickbare Variante des vi-Klons.
  • Zu Befehl
    Einfachen Text in PostScript wandeln, Quellcode übersichtlich formatiert ausdrucken, Bilddateien schnell zum Drucker schicken – all das und noch viel mehr gelingt mit a2ps auf der Kommandozeile.
  • Textdateien mit "diff" und "wdiff" vergleichen
    Mehrere Versionen derselben Datei werfen die Frage auf, ob diese sich unterscheiden – zumindest für Textdateien bringt die Shell alle Tools mit, die Sie brauchen, um diese Frage zu beantworten.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

WLAN-Signalqualität vom Treiber abhängig
GoaSkin , 29.10.2014 14:16, 0 Antworten
Hallo, für einen WLAN-Stick mit Ralink 2870 Chipsatz gibt es einen Treiber von Ralink sowie (m...
Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...