docs/cut

view cut.txt @ 0:5efb052a0d9e

Zwischenstand
author markus schnalke <meillo@marmaro.de>
date Sat, 02 May 2015 09:54:00 +0200
parents
children a3f18ccc3996
line source
1 Das Werkzeugkaestle
3 #1: cut - cut out selected fields of each line of a file
4 ---------------------------------------------------------
5 markus schnalke, 2015-04
8 Cut ist eines der klassischen Programme im Unix-Werkzeugkasten.
9 In keinem ordentlichen Tutorial zur Shellprogrammierung darf
10 es fehlen. Es ist ein schoenes Anschauungs- und Beispielobjekt
11 fuer's Shellscripting. Hier soll es portraitiert werden.
14 Die Funktionsbasis von cut sind urspruenglich zwei Modi, die
15 spaeter um einen dritten erweitert wurden. Entweder cut
16 schneidet bestimmte Zeichen aus den Zeilen der Eingabe oder
17 bestimmte durch Trennzeichen definierte Felder.
19 Der Zeichenmodus ist besonders praktisch um bestimmte Teile
20 von Kommandoausgaben zu extrahieren. Ein populaeres
21 Beispiel ist die Jahreszahl, die aus einer Datumsangabe
22 herausgeschnitten werden soll, insofern das Datumsformat
23 nicht frei gewaehlt werden kann. Ein anderer Anwendungsfall
24 ist die Extraktion bestimmter Zugriffsrecht. Hier z.B. die
25 Rechte fuer den Besitzer:
27 ls -l foo | cut -c 2-4
29 Oder die Schreibrechte fuer die Gruppe und alle anderen:
31 ls -l | cut -c 6,9
33 Damit ist die grundsaetzliche Verwendung von cut
34 demonstriert.
36 Die fuer POSIX wichtige Funktion von cut ist die Faehigkeit
37 lange Zeilen zu kuerzen.
39 cut -c -80
41 Dieser Befehl uebernimmt nur die ersten 80 Zeichen der
42 Eingabe in die Ausgabe. Der Rest der Zeilen wird einfach
43 abgeschnitten, koennte aber mit `cut -c 81-' extrahiert
44 werden.
46 Achtzig Zeichen erinnert unweigerlich an VT100-Terminals,
47 das 80 Zeichen pro Zeile darstellen kann. Geht es aber nicht
48 um die Darstellung von Zeichen sondern um ihre Speicherung,
49 dann ist `-c' nicht unbedingt die passende Option zur Kuerzung
50 langer Zeilen.
52 Frueher als US-ASCII das omnipraesente Charset und Encoding
53 war, war jedes Zeichen durch genau ein Byte kodiert und somit
54 beschnitt `cut -c' sowohl nach Ausgabezeichen als auch nach
55 Datenmenge. Als aber Multibyte-Kodierungen, wie UTF-8, aufkamen,
56 musste man sich von dieser Annahme loesen. In diesem Zug
57 bekam cut mit POSIX.2 die Option `-b'. Diese selektiert nach
58 Bytes. Will man also nur die ersten maximal 63 Bytes vor dem
59 Newline-Zeichen stehen haben (und den Rest stillschweigend
60 ignorieren), dann macht man das mit:
62 cut -b -63
65 Neben dem Zeichen- bzw. Byte-Modus bietet cut noch den
66 interessanteren Feld-Modus, den man mit `-f' einleitet. Mit ihm
67 koennen Felder ausgewaehlt werden. Das Trennzeichen -- per
68 Default der Tab -- kann mit `-d' geaendert werden.
70 Der typische Anwendungsfall fuer den Feld-Modus. Ist die
71 Extraktion von Information aus der passwd-Datei. So z.B. der
72 Username, die User-ID und das Homeverzeichnis:
74 cut -d: -f1,3,6 /etc/passwd
76 (Die Argumente fuer die Optionen koennen bei cut uebrigens
77 direkt angehaengt oder mit Whitespace abgetrennt folgen.)
80 Dieser Feld-Modus ist fuer einfache tabellarische Dateien
81 (wie eben die passwd) gut geeignet, kommt aber schnell an
82 seine Grenzen. Gerade der uebliche Fall, dass an Whitespace
83 in Felder geteilt werden soll, wird damit nicht abgedeckt.
84 Der Delimiter kann nur genau ein Zeichen sein. Es kann also
85 nicht sowohl an Leerzeichen als auch an Tabs getrennt werden.
86 Auch unterteilt cut an jedem Trennzeichen. Zwei aneinander
87 stehende Trennzeichen fuehren zu einem leeren Feld. Solches
88 Verhalten ist fuer Whitespace-getrennte Felder unangemessen.
89 Diese Aufgaben deckt aber zum Glueck awk ab, so dass die
90 Alternative zur Hand ist.
92 Awk hat eine weitere Funktion, die
93 cut missen laesst: Das Tauschen der Feld-Reihenfolge.
99 Geschichtliches
101 Cut erblickte in XXX das Licht der Welt. Im Verleich zu
102 XXX stiess es erst relativ spaet XXX
104 XXX ueber XXX floss
105 es in den XXX Standard ein, wo es seither residiert.
107 Standardisierung
109 Verbreitung