Druckversion | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cat verkettet seine Argumente (Dateiinhalte) und schreibt das Ergebnis auf die Standardausgabe. Werden dem Kommando keine Argumente übergeben, erwartet cat seine Eingaben von der Standardeingabe (eine solche Eingabe wird mit [Ctrl]-[D] (EOF) abgeschlossen):
Mit der Option -n nummeriert cat die Zeilen in der Ausgabe:
csplit zerlegt die angegebene Datei an allen dem Suchmuster entsprechenden Zeilen und schreibt die einzelnen Teile in die Dateien xx00, xx01, xx02, ... Als Muster kann Folgendes stehen: Ganze Zahl Die Trennung erfolgt vor der durch die Zahl spezifizierten Zeile /Regulärer Ausdruck/[OFFSET] Die Trennung erfolgt vor der Zeile, die das Muster enthält %Regulärer Ausdruck%[OFFSET] Die Zeilen bis zur Zeile, die das Muster enthält, werden übersprungen {Ganze Zahl} Wiederholt die vorhergehende Mustersuche so oft wie angegeben {*} Wiederholt die vorhergehende Mustersuche so oft wie möglich [OFFSET] +/-n: trennt n Zeilen hinter/vor der durch das Muster spezifizierten Zeile In unserer Beispieldatei steht Folgendes:
Zunächst soll csplit an Zeilen, die das Muster "Zeile" enthalten, aufgeteilt werden:
Das Kommando trennt wie erwartet vor der Zeile mit dem Muster - allerdings
betrachtet csplit nach der ersten erfolgreichen Suche seine Arbeit als erledigt.
Die beiden Dateien xx00 und xx01 enthalten 0 bzw. 51 Bytes. Dies sind die
Ausgaben des Kommandos.
Mittels -f part werden die Zieldateien mit part00, part01, ... benannt. -z entfernt leere Dateien.
cut kann verwendet werden, um bestimmte Bytes, Felder oder Zeichen aus den Zeilen einer Datei zu extrahieren. Extrahieren von Bytes: Mit der Option -b Bereich lassen sich die durch Bereich benannten Bytes aus der Eingabedatei herausfiltern. Als Beispiel soll die Verwendung in Verbindung mit dem Pipelining demonstriert werden:
cut bezieht seine Eingabe von der Ausgabe des Kommandos ls -l. Daraus werden die Bytes 1-11 (Zugriffsrechte) sowie alle Bytes ab dem 56. bis zum Zeilenende (Dateiname) extrahiert. Extrahieren von Feldern: cut arbeitet mit der Option -f Feldnummern mit Feldern. Per Voreinstellung werden Tabulatoren als Feldbegrenzer angenommen. Mit der Option -d Zeichen kann ein beliebiger anderer Begrenzer angegeben werden:
Extrahieren von Zeichen: Diese Option arbeitet analog zu -b, da ein Zeichen ein Byte groß ist.
Nicht selten stößt man bei der Suche im Dateisystem auf Dateien mit gleichem Namen. Handelt es sich nun um Kopien oder entspringt die Namensverwandtschaft dem Zufall? diff hilft im Falle von Textdateien weiter, indem es einen zeilenweisen Vergleich vornimmt und die Unterschiede in den Dateien protokolliert. diff lässt sich selbst von eingefügten oder entfernten Zeilen nicht aus der Ruhe bringen. Das Werkzeug erkennt derartige Passagen und vermag unabhängig von der Zeilennummerierung den Vergleich zu führen. Ein BeispielAnhand zweier Dateien soll die Arbeitsweise des Kommandos demonstriert werden.
In der zweiten Datei bleibt die Grobstruktur erhalten:
Zum Verstehen der Ausgabe von diff bedarf es sicher einiger Übung:
Der Report ist aus Sicht der zweiten Datei aus der Eingabe verfasst. Eine mit > beginnende Zeile, deutet an, dass sie hinzugekommen ist. < leitet eine entfernte Zeile ein. Die weiteren Angaben geben Auskunft über die Lage der Änderungen. a (append) steht für Einfügungen; d (delete) für gelöschte Zeilen. Die Nummern vor dem Buchstaben beschreiben hierbei die Positionen in der Originaldatei, die nachfolgenden Nummern die der zweiten Datei. Neben dem obigen (Standard)Format steuern Optionen die Ausgabe von diff. In Zusammenhang mit patch ist das »unified«-Format verbreitet:
Von den Optionen seien nur -b und -B genannt, mit welchen diff enthaltene Leerzeichen bzw. Leerzeilen beim Vergleich außer Acht lässt. Werden anstatt Dateinamen die Namen von Verzeichnissen angegeben, vergleicht diff die darin enthaltenen Dateien in alphabetischer Reihenfolge. Das Verfahren kann rekursiv (Option -r) auf alle Unterverzeichnisse angewendet werden, womit sich die Unterschiede ganzer Verzeichnishierarchien auswerten lassen. In Skripten interessiert häufig nicht die konkrete Ausgabe von diff sondern einzig, ob sich zwei Dateien unterscheiden oder nicht. Hierfür kann der Rückgabewert des Kommandos betrachtet werden:
Die Voreinstellung der Tabulatorschrittweite ist 8 und kann mittels -t Anzahl geändert werden. Die Beispieldatei wurde in einem Editor erstellt und enthält Tabulatoren, deren Anzahl durch eine vorangestellte Nummer markiert ist. Das Kommando cat kann zur symbolischen Anzeige der Tabulatoren genutzt werden:
Nun die Ausgaben von expand mit normaler Schrittweite des Tabulators und mit geänderter Schrittweite:
Hinweis: Das Kommando unexpand ersetzt Leerzeichen durch die entsprechende Anzahl Tabulatoren.
fmt ist ein sehr einfacher Textformatierer. Er ermöglicht das beliebige Auffüllen und Umbrechen der Zeilen von ASCII-Texten.
Im Vergleich zu fold werden ganze Wörter im Text niemals zersäbelt. Genauso wird das Wort nach einem Punkt "." nicht abgetrennt. -w Spalten setzt die maximale Länge der Zeilen; mit der Option -s werden umgebrochene Zeilen nicht aufgefüllt (mit der nachfolgenden Zeile kombiniert). Und die Option -t verdeutlicht den Absatzanfang, indem alle weiteren Zeilen eingerückt werden. Weitere Optionen sind: -c bzw. --crown-margin Erhält die Einrückung der ersten beiden Zeilen -u bzw. --uniform-spacing Kürzt auf ein Leerzeichen zwischen Worten, zwei nach Sätzen
Das Kommando bricht nach der Voreinstellung lange Zeilen in der Eingabe nach dem 80. Zeichen um. Das entspricht den Optionen -bw 80. Sollten die Zeilen an Whitespaces getrennt werden, muss das fold mitgeteilt werden -s. Mit -w Nummer kann eine beliebige Umbruchposition angegeben werden:
Zu grep existieren noch die verwandten Kommandos egrep und fgrep, die sich nur durch unterschiedliche Interpretation des Musters unterscheiden. Die Kommandos im allgemeinen durchsuchen die angegebenen Datei(en) (oder die Standardeingabe) nach Zeilen, die das Muster enthalten und schreiben im einfachsten Fall die übereinstimmenden Zeilen auf die Standardausgabe. Da uns der Umgang mit dem Kommando als immens wichtig erscheint, haben wir der grep-Familie einen eigenen Abschnitt im Kapitel Werkzeuge (grep) spendiert und werden dort eine ausführliche Diskussion folgen lassen. Einige Beispiele sollen dennoch den Gebrauch des Kommandos schulen:
less dient wie auch das nachfolgend beschriebene Kommando more zur Anzeige der Inhalte von Dateien. Allerdings ermöglicht less das Zurückblättern selbst in Texten, die aus einer Pipe gelesen werden. Auch beendet sich das Kommando nicht selbsttätig beim Erreichen des Dateiendes. Als Weiterentwicklung von more kennt less dieselben Tasten zur Navigation (Siehe Tabelle bei more). Wichtige Erweiterungen sind die Rückwärtssuche von Text mit ?Muster, sowie die Kommandos g und G, die zur ersten/letzten Bildschirmzeile springen. Wird vor den Kommandos eine Zahl n eingegeben, so wird zur benannten Zeile gewechselt. Im Falle von G erfolgt die Zählung vom Dateiende aus. Darüber hinaus stehen unzählige Kommandozeilenoptionen bereit, die in der Praxis so ziemlich niemals zum Einsatz gelangen.
more dient der seitenweisen Anzeige des Inhalts von Dateien. Nach jeder Seite wird die Ausgabe angehalten und auf eine Eingabe des Benutzers gewartet. Ist das Dateiende erreicht, beendet sich more selbsttätig. In einer Statuszeile zeigt more die prozentuale Position der dargestellten Seite innerhalb der Datei an. Das Kommando beginnt mit der Darstellung der ersten Seite, es sei denn, mit + Zeilennummer wird explizit die erste darzustellende Zeile angegeben. Alternativ kann die Ausgabe mit +/ Muster 2 Zeilen vor der ersten Zeile mit dem Auftreten eines bestimmten Musters begonnen werden. Von den Kommandozeilenoptionen sind -n nützlich, das die Anzahl darzustellender Zeilen pro Seite auf den Wert n setzt, -d zur erweiterten Anzeige der Statuszeile:
Die Option -s fasst eine Folge von Leerzeilen zu einer einzigen zusammen und -u unterdrückt die Darstellung von unterstrichenen Text. Die nachfolgende Liste zeigt die wichtigsten Eingaben zur Navigation in den Seiten auf: [Leerzeichen] Nächste Bildschirmseite, wird zuvor eine Zahl n eingegeben, so werden die folgenden n Zeilen angezeigt d Ausgabe der nächsten 11 Zeilen ns Überspringen der nächsten n Zeilen nf Überspringen der nächsten n Bildschirmseiten nb Springt um n Bildschirmseiten zurück q Beenden des Programms = Anzeige der aktuellen Zeile v Der Editor vi wird mit der aktuellen Datei gestartet n/Muster Springt zum n-ten Auftreten des Musters n Sucht das letzte Muster erneut, durch Voranstellen einer Zahl n wird das n-te Auftreten gesucht , Springt zum Ausgangspunkt der letzten Suche n Springt an den Anfang der nächsten Datei (falls mehrere in der Kommandozeile angegeben wurden), durch Voranstellen eine Zahl n wird um die entsprechende Anzahl Dateien weiter gegangen p Springt an den Anfang der aktuellen Datei, falls mehrere in der Kommandozeile angegeben wurden, gelangt man in die vorherige Datei aus der Liste
Das Kommando schreibt seine Eingabe auf die Standardausgabe, wobei vor jeder Zeile deren Nummer ausgegeben wird:
nl kann in der Eingabe logische Einheiten erkennen und für jede eine eigene Nummerierung vornehmen. In diesem Zusammenhang spielte das Kommando früher bei der Textformatierung eine Rolle. Heute wird es vor allem zur Nummerierung von Programm-Quelltexten genutzt. Als Optionen seien hier nur genannt: -i n Inkrementiert die Zeilennummer in jedem Schritt um den Wert n -s Zeichenkette Schreibt Zeichenkette zwischen jede Zeilennummer und den Text der Zeile -v n Startet mit Zeilennummer n
od lässt sich den Pagern zuordnen, da das Kommando nur das Betrachten von Dateien gestattet und nicht deren Modifikation. Das Standardausgabeformat ist oktale Bytes, kann aber wie folgt geändert werden: -a bzw. -t a ASCII-Format -b bzw. -t oC Oktale Bytes -c bzw. -t c ASCII und Escape-Squenzen (bei nichtdruckbaren Zeichen) -d bzw. -t u2 Unsigned Short (dezimal) -f bzw -t fF Floats -h bzw. -t x2 Short (hexadezimal) -i bzw. -t d2 Shorts (dezimal) -l bzw. -t d4 Long (dezimal) -o bzw. -t o2 Shorts (oktal) -x bzw. -t x2 Short (hexadezimal) Der vorrangige Nutzen des Kommandos liegt sicherlich im Betrachten von Speicherauszügen. Optionen, die die Eingabe beeinflussen sind u.a., -j bytes zum Überspringen der ersten Bytes der Eingabedatei(en), -N bytes zum Begrenzen der Ausgabe auf eine anzugebende Anzahl Bytes und -w bytes zum Begrenzen der Länge einer Ausgabezeile. Als Beispiel werfen wir einem Blick auf den Masterbootsektor Mbr der ersten IDE-Festplatte:
Das Kommando sort verkettet alle Eingabedateien und schreibt das Ergebnis im default-Modus sortiert auf die Standardausgabe. Die weiteren Modi sind das Mischen sortierter Daten mittels der Option -m und das Prüfen, ob eine Datei sortiert ist -c. sort vergleicht, wenn nicht anders angegeben, die gesamte Zeile. Das Sortierkriterium kann auf Feld(er) eingeschränkt werden, wobei die Feldgrenze zwischen letztem Nicht-Whitspace und Whitespace voreingestellt ist. Das impliziert, dass ein Feld führende Whitespace enthalten kann, aber keine nachfolgenden. Um ein Feld zu spezifizieren, sollte die POSIX-konforme Notation -k Feld1[,Feld2] verwendet werden, wobei die Nummerierung der Felder bei 1 beginnt. Um die Ausgabe des Kommandos ls -l nach der Dateigröße zu sortieren, benötigen wir folgende Kommandozeile:
Das Ergebnis entspricht vermutlich nicht ganz dem Erwarteten... sort sortiert, wenn man ihm nichts anderes mitteilt, gemäß dem ASCII-Zeichensatz. Und da bspw. die Zeichenkette "71" alphabetisch kleiner ist als "76", wird "716916" vor "7680" eingeordnet... Um eine numerische Sortierung zu erzwingen, ist die Option -n zu verwenden, allerdings kann sort auch dann nicht mit Vorzeichen und Gleitkommazahlen (wie "1.0e-34") umgehen. Letzteres ermöglicht erst die Option -g.
Wichtige Optionen beeinflussen den Vergleich der Felder, so ignoriert -i nichtdruckbare Zeichen und die Option -d bewirkt eine Sortierung wie im Telefonbuch (alle Zeichen außer Leerzeichen, Ziffern und Buchstaben werden übergangen). Soll die Groß- und Kleinschreibung keine Rolle spielen, erreicht man das mit der Option -f. Auch ein anderer Feldtrenner ist über -t Separator angebbar. Eine Ausgabe der Datei /etc/passwd, sortiert nach der Gruppennummer erhält man mit:
Schließlich lässt sich die Sortierung umkehren -r und die Ausgabe in eine -o Datei umlenken.
Soll eine sehr große Datei auf Disketten kopiert werden, kommt man um eine Zerlegung der Datei nicht umhin. Das Kommando split erzeugt aus einer Eingabedatei die benötigte Anzahl Ausgabedateien, wobei die Größe der Einzeldateien und deren Präfix-Name konfigurierbar sind. Mit der Option -b size weist man split an, das Original in Einzeldateien von jeweils size-Bytes Umfang (bis auf die letzte) aufzuteilen, deren Namen dann Prefixaa, Prefixab,..., Prefixaz, Prefixba, ... lauten. Wird "PREFIX" nicht angegeben, lautet dieses x.
Obiges Beispiel trennt exakt an der angegebenen Byteposition. Bei ASCII-Dateien kann es mitunter sinnvoll sein, eine bestimmte Anzahl Zeilen des Originals jeweils in eine neue Datei zu schreiben. Die Option -l number (kleines "L") erzwingt dieses Vorgehen. Der Nachteil sind die sicherlich stark unterschiedlichen Speichergrößen der einzelnen Teildateien, die stark von den Längen der Zeilen der Ausgangsdatei abhängen. Deshalb existiert -C size, wobei split am jeweils letzten Zeilenende trennt, so dass die entstehende Datei maximal size Bytes groß wird.
Das Kommando verkettet (mehrere) Dateien und schreibt das Ergebnis in umgekehrter Reihenfolge auf die Standardausgabe. Es arbeitet im einfachsten Fall wie ein "verkehrtes cat":
Im Unterschied zu cat arbeitet das Kommando allerdings auf Feldern. Da der voreingestellte Feldtrenner der Zeilenumbruch (Newline) ist, bewirkt tac das cat-ähnliche Verhalten. Der Feldtrenner kann überschrieben werden. Mit der Option -b wird der Inhalt des ersten Feldes der Eingabedatei als Feldtrenner verwendet. Mit der Option -s Trenner kann dem Kommando ein beliebiges Trennmuster angegeben werden. Diese Muster kann ein regulärer Ausdruck sein, wenn das Kommando zusätzlich mit der Option -r aufgerufen wird:
uniq entfernt mehrfach auftretende Zeilen in einer sortierten Datei.
Wichtige Optionen sind: -c Anzeige, wie oft die Zeile existiert:
-d Nur mehrfach exstierende Zeilen werden angezeigt:
-f N / -s N Die ersten N Felder/Zeichen werden in den Vergleich nicht mit einbezogen:
-i Groß-/Kleinschreibung werden nicht unterschieden -u Nur einfach vorkommende Zeilen werden ausgegeben:
Das Kommando zählt die enthaltenen Zeilen (Option -l), Wörter (-w) und Zeichen (-c) in seiner Eingabe. Mit der Option -L wird die Anzahl Zeichen der längsten Eingabezeile ausgegeben:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Korrekturen, Hinweise? |