Mercurial > docs > cut
comparison cut.txt @ 0:5efb052a0d9e
Zwischenstand
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Sat, 02 May 2015 09:54:00 +0200 |
parents | |
children | a3f18ccc3996 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:5efb052a0d9e |
---|---|
1 Das Werkzeugkaestle | |
2 | |
3 #1: cut - cut out selected fields of each line of a file | |
4 --------------------------------------------------------- | |
5 markus schnalke, 2015-04 | |
6 | |
7 | |
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. | |
12 | |
13 | |
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. | |
18 | |
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: | |
26 | |
27 ls -l foo | cut -c 2-4 | |
28 | |
29 Oder die Schreibrechte fuer die Gruppe und alle anderen: | |
30 | |
31 ls -l | cut -c 6,9 | |
32 | |
33 Damit ist die grundsaetzliche Verwendung von cut | |
34 demonstriert. | |
35 | |
36 Die fuer POSIX wichtige Funktion von cut ist die Faehigkeit | |
37 lange Zeilen zu kuerzen. | |
38 | |
39 cut -c -80 | |
40 | |
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. | |
45 | |
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. | |
51 | |
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: | |
61 | |
62 cut -b -63 | |
63 | |
64 | |
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. | |
69 | |
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: | |
73 | |
74 cut -d: -f1,3,6 /etc/passwd | |
75 | |
76 (Die Argumente fuer die Optionen koennen bei cut uebrigens | |
77 direkt angehaengt oder mit Whitespace abgetrennt folgen.) | |
78 | |
79 | |
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. | |
91 | |
92 Awk hat eine weitere Funktion, die | |
93 cut missen laesst: Das Tauschen der Feld-Reihenfolge. | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 Geschichtliches | |
100 | |
101 Cut erblickte in XXX das Licht der Welt. Im Verleich zu | |
102 XXX stiess es erst relativ spaet XXX | |
103 | |
104 XXX ueber XXX floss | |
105 es in den XXX Standard ein, wo es seither residiert. | |
106 | |
107 Standardisierung | |
108 | |
109 Verbreitung |