cat - Dateien verketten |
Aufruf: cat [OPTIONEN] [DATEI]... |
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):
user@sonne> cat Ohne Argument liest »cat« von der Standardeingabe [Enter] Ohne Argument liest »cat« von der Standardeingabe Jede durch [Enter] abgeschlossene Zeile gibt »cat« sofort aus[Enter] Jede durch [Enter] abgeschlossene Zeile gibt »cat« sofort aus Beendet wird die Ausgabe durch [Ctrl]-[D][Enter] Beendet wird die Ausgabe durch [Ctrl]-[D] [Ctrl]-[D] user@sonne> |
Mit der Option -n nummeriert cat die Zeilen in der Ausgabe:
user@sonne> cat -n testdatei 1 Eine erste Zeile. 2 Noch eine Zeile. 3 Eine dritte Zeile. |
csplit - Dateien an definierten Stellen zerlegen |
Aufruf: csplit [OPTIONEN]... DATEI MUSTER... |
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:
user@sonne> cat testdatei Eine erste Zeile. Noch eine Zeile. Eine dritte Zeile. |
Zunächst soll csplit an Zeilen, die das Muster "Zeile" enthalten, aufgeteilt werden:
user@sonne> csplit testdatei
/Zeile/ 0 51 |
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.
Soll nun nach jeder Zeile mit dem Muster getrennt werden, hilft diese Eingabe:
user@sonne> csplit testdatei /Zeile/ {*}
-f part -z 17 16 18 |
Mittels -f part werden die Zieldateien mit part00, part01, ... benannt. -z entfernt leere Dateien.
cut - Abschnitte aus jeder Zeile einer Datei extrahieren |
Aufruf: cut [OPTIONEN]... [DATEI]... |
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:
user@sonne> ls -l /boot | cut -b
1-11,56- total 718 -rw-r--r-- System.map -rw-r--r-- boot.b -rw-r--r-- chain.b -rw------- map -rw-r--r-- vmlinuz |
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:
user@sonne> cut -d " " -f 1,3
testdatei Eine Zeile. Noch Zeile. Eine Zeile. |
Extrahieren von Zeichen: Diese Option arbeitet analog zu -b, da ein Zeichen ein Byte groß ist.
diff - Dateiinhalte vergleichen |
Aufruf: diff [OPTIONEN] DATEI_1 DATEI_2 |
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.
Anhand zweier Dateien soll die Arbeitsweise des Kommandos demonstriert werden.
user@sonne> cat Datei1 Abschnitt 1 Abschnitt 2 Abschnitt 3 Unterabschnitt 3.1 Unterabschnitt 3.2 Abschnitt 4 |
In der zweiten Datei bleibt die Grobstruktur erhalten:
user@sonne> cat Datei2 Abschnitt 1 Unterabschnitt 1.1 Abschnitt 2 Abschnitt 3 Abschnitt 4 Unterabschnitt 4.1 |
Zum Verstehen der Ausgabe von diff bedarf es sicher einiger Übung:
user@sonne> diff Datei1 Datei2 1a2 > Unterabschnitt 1.1 4,5d4 < Unterabschnitt 3.1 < Unterabschnitt 3.2 6a6 > Unterabschnitt 4.1 |
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:
user@sonne> diff --unified Datei1
Datei2 --- Datei1 Fri Apr 13 18:28:51 2001 +++ Datei2 Fri Apr 13 18:32:49 2001 @@ -1,6 +1,6 @@ Abschnitt 1 + Unterabschnitt 1.1 Abschnitt 2 Abschnitt 3 - Unterabschnitt 3.1 - Unterabschnitt 3.2 Abschnitt 4 + Unterabschnitt 4.1 |
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:
expand - Tabulatoren durch Leerzeichen ersetzen |
Aufruf: expand [OPTIONEN]... [DATEI]... |
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:
user@sonne> cat -t tabdatei 1^I2^I 1^I2^I3^I4 1^I |
Nun die Ausgaben von expand mit normaler Schrittweite des Tabulators und mit geänderter Schrittweite:
user@sonne> expand tabdat 1 2 1 2 3 4 1 user@sonne> expand -t 3 tabdat 1 2 1 2 3 4 1 |
Hinweis: Das Kommando unexpand ersetzt Leerzeichen durch die entsprechende Anzahl Tabulatoren.
fmt - Texte formatieren |
Aufruf: fmt [-w Länge] [OPTIONEN]... [DATEI]... |
fmt ist ein sehr einfacher Textformatierer. Er ermöglicht das beliebige Auffüllen und Umbrechen der Zeilen von ASCII-Texten.
user@sonne> cat beispiel.txt Der Inhalt der Beispieldatei soll zunächst nach der 30. Position umgebrochen werden. Dann demonstrieren wir die Wirkung der Optionen "-s" und "-t". user@sonne> fmt -w 30 beispiel.txt Der Inhalt der Beispieldatei soll zunächst nach der 30. Position umgebrochen werden. Dann demonstrieren wir die Wirkung der Option "-s" und "-t". user@sonne> fmt -w 30 -s beispiel.txt Der Inhalt der Beispieldatei soll zunächst nach der 30. Position umgebrochen werden. Dann demonstrieren wir die Wirkung der Option "-s" und "-t". user@sonne> fmt -w 30 -t beispiel.txt Der Inhalt der Beispieldatei soll zunächst nach der 30. Position umgebrochen werden. Dann demonstrieren wir die Wirkung der Option "-s" und "-t". |
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
fold - Lange Zeilen umbrechen |
Aufruf: fold [OPTIONEN]... [DATEI]... |
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:
user@sonne> cat beispiel.txt Der Inhalt der Beispieldatei soll zunächst nach der 30. Position umgebrochen werden. Dann demonstrieren wir die Wirkung der Option "-s". user@sonne> fold -w 30 beispiel.txt Der Inhalt der Beispieldatei s oll zunächst nach der 30. Posi tion umgebrochen werden. Dann demonstrieren wir die Wir Wirkung der Option "-s". user@sonne> fold -w 30 -s beispiel.txt Der Inhalt der Beispieldatei soll zunächst nach der 30. Position umgebrochen werden. Dann demonstrieren wir die Wirkung der Option "-s". |
grep - Zeichenmuster in Dateien suchen |
Aufruf: grep [-[AB] NUM] [-CEFGVbchiLlnqsvwxyUu] [-e MUSTER | -f DATEI] files... |
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:
user@sonne> grep root
/etc/passwd root:x:0:0:root:/root:/bin/bash user@sonne> ps ax | grep bash 287 tty1 S 0:00 -bash 355 pts/0 S 0:00 /bin/bash 438 pts/4 S 0:00 -bash 4341 pts/1 S 0:00 grep bash user@sonne> ps x | grep bash | grep -v grep 287 tty1 S 0:00 -bash 355 pts/0 S 0:00 /bin/bash 438 pts/4 S 0:00 -bash |
less - Dateiinhalte betrachten |
Aufruf: less [OPTION]... [DATEI]... |
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 - Dateiinhalte betrachten |
Aufruf: more [-dlfpcsu] [-num] [+/ Muster] [+ Zeile] [DATEI ...] |
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:
user@sonne> more -d datei.txt ... --Mehr--(44%)[Leertaste zum Fortfahren, «Q» zum Beenden.] |
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
nl - Zeilen nummerieren |
Aufruf: nl [OPTION]... [DATEI]... |
Das Kommando schreibt seine Eingabe auf die Standardausgabe, wobei vor jeder Zeile deren Nummer ausgegeben wird:
user@sonne> nl testdat 1 eine erste Zeile 2 eine zweite Zeile 3 eine einzige Zeile |
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
user@sonne> nl -v 10 -i 10 -s ". Zeile = " testdat 10. Zeile = eine erste Zeile 20. Zeile = eine zweite Zeile 30. Zeile = eine einzige Zeile |
od - Dateiinhalte in verschiedenen Formaten darstellen |
Aufruf: od [OPTIONEN]... [DATEI]... |
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:
root@sonne> od -x -N 512 /dev/hda | tail
-5 od -x -N 512 /dev/hda | tail -5 0000700 0201 fe06 067f 7d82 0000 fac5 003f 0000 0000720 1841 fe05 ffff a318 0044 1d2b 00b7 0000 0000740 0741 fe82 177f 7847 0040 2ad1 0004 0100 0000760 0001 fe83 013f 003f 0000 7d43 0000 aa55 0001000 root@sonne> od -a -N 512 /dev/hda | tail -5 0000700 soh stx ack ~ del ack stx } nul nul E z ? nul nul nul 0000720 A can enq ~ del del can # D nul + gs 7 nul nul nul 0000740 A bel stx ~ del etb G x @ nul Q * eot nul nul soh 0000760 soh nul etx ~ ? soh ? nul nul nul C } nul nul U * 0001000 |
sort - Dateiinhalte sortieren oder mischen |
Aufruf: sort [OPTIONEN]... [DATEI]... |
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:
user@sonne> ls -l /boot/ | sort -k
5 -rw-r--r-- 1 root root 620 Feb 24 18:26 os2_d.b -rw-r--r-- 1 root root 667293 Nov 19 1999 vmlinuz.old -rw-r--r-- 1 root root 716916 Dec 14 1999 vmlinuz -rw------- 1 root root 7680 Jan 13 09:04 chos.map -rw-r--r-- 1 root root 812 Nov 9 1999 chos.loader-linux |
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.
user@sonne> ls -l /boot/ | sort -nk
5 -rw-r--r-- 1 root root 620 Feb 24 18:26 os2_d.b -rw-r--r-- 1 root root 812 Nov 9 1999 chos.loader-linux -rw------- 1 root root 7680 Jan 13 09:04 chos.map -rw-r--r-- 1 root root 667293 Nov 19 1999 vmlinuz.old -rw-r--r-- 1 root root 716916 Dec 14 1999 vmlinuz |
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:
user@sonne> sort -t : -gk 4 /etc/passwd
| head +:::::: root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/bash daemon:x:2:2:daemon:/sbin:/bin/bash ftp:x:40:2:ftp account:/usr/local/ftp:/bin/bash man:x:13:2::/var/catman:/bin/bash mysql:x:60:2:MySQL Database User:/var/mysql:/bin/false postgres:x:26:2:Postgres Database Admin:/var/lib/pgsql:/bin/bash amanda:x:37:6:Amanda Admin:/var/lib/amanda:/bin/bash lp:x:4:7:lp daemon:/var/spool/lpd:/bin/bash |
Schließlich lässt sich die Sortierung umkehren -r und die Ausgabe in eine -o Datei umlenken.
split - Dateien in gleichmäßige Portionen zerlegen |
Aufruf: split [OPTIONEN] [INPUT [PREFIX]] |
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.
user@sonne> ls -l -rw-r--r-- 1 user users 2099200 Jun 8 07:04 linuxfibel.tar user@sonne> split -b 1440k linuxfibel.tar -rw-r--r-- 1 user users 2099200 Jun 8 07:04 linuxfibel.tar -rw-r--r-- 1 user users 1474560 Jun 13 08:22 xaa -rw-r--r-- 1 user users 624640 Jun 13 08:22 xab |
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.
tac - "Verkehrtes cat" |
Aufruf: tac [OPTIONEN]... [DATEI]... |
Das Kommando verkettet (mehrere) Dateien und schreibt das Ergebnis in umgekehrter Reihenfolge auf die Standardausgabe. Es arbeitet im einfachsten Fall wie ein "verkehrtes cat":
user@sonne> cat testdat eine erste Zeile eine zweite Zeile eine erste Zeile eine zweite Zeile eine einzige Zeile user@sonne> tac testdat eine einzige Zeile eine zweite Zeile eine erste Zeile eine zweite Zeile eine erste Zeile |
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:
user@sonne> tac -r -s ei[nt]
testdat zige Zeile e eine Zeile eine zweite erste Zeile eine Zeile eine zweite erste Zeile einein |
uniq - Doppelte Zeilen ausblenden |
Aufruf: uniq [OPTIONEN]... [INPUT [OUTPUT]] |
uniq entfernt mehrfach auftretende Zeilen in einer sortierten Datei.
user@sonne> cat testdat eine erste Zeile eine zweite Zeile eine erste Zeile eine zweite Zeile eine einzige Zeile user@sonne> sort testdat | uniq eine einzige Zeile eine erste Zeile eine zweite Zeile |
Wichtige Optionen sind:
-c
Anzeige, wie oft die Zeile existiert:
user@sonne> sort testdat | uniq -c 1 eine einzige Zeile 2 eine erste Zeile 2 eine zweite Zeile |
-d
Nur mehrfach exstierende Zeilen werden angezeigt:
user@sonne> sort testdat | uniq -d eine erste Zeile eine zweite Zeile |
-f N / -s N
Die ersten N Felder/Zeichen werden in den Vergleich nicht mit einbezogen:
user@sonne> sort testdat | uniq -f 2 eine einzige Zeile |
-i
Groß-/Kleinschreibung werden nicht unterschieden
-u
Nur einfach vorkommende Zeilen werden ausgegeben:
user@sonne> sort testdat | uniq -u eine einzige Zeile |
wc - Zeilen, Wörter, Zeichen zählen |
Aufruf: wc [OPTIONEN]... [DATEI]... |
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:
user@sonne> wc testdat 5 15 89 testdat user@sonne> wc -c testdat 89 testdat user@sonne> wc -L testdat 18 testdat |