Home / LinuxUser / 2001 / 11 / Zu Befehl

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

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.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

1412 Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...