comparison cut.txt @ 15:77d1f55bba08

Weitere Ueberarbeitungen
author markus schnalke <meillo@marmaro.de>
date Tue, 12 May 2015 07:35:33 +0200
parents bf5e41260f89
children 4d8196c836d8
comparison
equal deleted inserted replaced
14:21ad1c1548c4 15:77d1f55bba08
1 Das Werkzeugkaestle, #1
2
3 cut - cut out selected fields of each line of a file 1 cut - cut out selected fields of each line of a file
4 ---------------------------------------------------- 2 ----------------------------------------------------
5 markus schnalke <meillo@marmaro.de> 3 markus schnalke <meillo@marmaro.de>
6 2015-05 4 2015-05
7 5
23 Der Zeichenmodus ist optimal geeignet um Festbreitenformate zu 21 Der Zeichenmodus ist optimal geeignet um Festbreitenformate zu
24 zerteilen. So kann man damit beispielsweise bestimmte 22 zerteilen. So kann man damit beispielsweise bestimmte
25 Zugriffsrechte aus der Ausgabe von `ls -l' ausschneiden, in 23 Zugriffsrechte aus der Ausgabe von `ls -l' ausschneiden, in
26 diesem Beispiel die Rechte des Besitzers: 24 diesem Beispiel die Rechte des Besitzers:
27 25
26 $ ls -l foo
27 -rw-rw-r-- 1 meillo users 0 May 12 07:32 foo
28
28 $ ls -l foo | cut -c 2-4 29 $ ls -l foo | cut -c 2-4
29 rw- 30 rw-
30 31
31 Oder die Schreibrechte des Besitzers, der Gruppe und der 32 Oder die Schreibrechte des Besitzers, der Gruppe und der
32 Welt: 33 Welt:
39 $ long=12345678901234567890 40 $ long=12345678901234567890
40 $ echo "$long" | cut -c -10 41 $ echo "$long" | cut -c -10
41 1234567890 42 1234567890
42 43
43 Dieser Befehl gibt die ersten maximal 10 Zeichen von 44 Dieser Befehl gibt die ersten maximal 10 Zeichen von
44 `$long' aus. (Alternativ kann man hierfuer auch `printf 45 `$long' aus. (Alternativ kann man hierfuer `printf
45 "%.10s\n" "$long"' verwenden.) 46 "%.10s\n" "$long"' verwenden.)
46 47
47 Geht es aber nicht um die Darstellung von Zeichen, sondern um 48 Geht es aber nicht um die Darstellung von Zeichen, sondern um
48 ihre Speicherung, dann ist `-c' nicht unbedingt geeignet. 49 ihre Speicherung, dann ist `-c' nicht unbedingt geeignet.
49 Frueher, als US-ASCII als Zeichensatz und -kodierung 50 Frueher, als US-ASCII als Zeichensatz und -kodierung
107 Faellen. 108 Faellen.
108 109
109 Awk bietet noch eine weitere Funktion, die cut missen 110 Awk bietet noch eine weitere Funktion, die cut missen
110 laesst: Das Tauschen der Feld-Reihenfolge in der Ausgabe. Bei 111 laesst: Das Tauschen der Feld-Reihenfolge in der Ausgabe. Bei
111 cut ist die Reihenfolge der Feldauswahlangabe irrelevant; ein 112 cut ist die Reihenfolge der Feldauswahlangabe irrelevant; ein
112 Feld kann selbst mehrfach angegeben werden. 113 Feld kann selbst mehrfach angegeben werden. So gibt der Aufruf
113
114 XXX
115 4.3BSD-Reno + *BSDs
116 * This parser is less restrictive than the Draft 9 POSIX spec.
117 * POSIX doesn't allow lists that aren't in increasing order or
118 * overlapping lists. We also handle "-3-5" although there's no
119 * real reason too.
120
121 So gibt der Aufruf
122 von `cut -c 5-8,1,4-6' die Zeichen Nummer 1, 4, 5, 6, 7 und 8 114 von `cut -c 5-8,1,4-6' die Zeichen Nummer 1, 4, 5, 6, 7 und 8
123 in genau dieser Reihenfolge aus. Die Auswahl entspricht damit 115 in genau dieser Reihenfolge aus. Die Auswahl entspricht damit
124 der Mengenlehre in der Mathematik: Jedes angegebene Feld wird 116 der Mengenlehre in der Mathematik: Jedes angegebene Feld wird
125 Teil der Ergebnismenge. Die Felder der Ergebnismenge sind 117 Teil der Ergebnismenge. Die Felder der Ergebnismenge sind
126 dabei immer gleich geordnet wie in der Eingabe. Um die Worte 118 dabei immer gleich geordnet wie in der Eingabe. Um die Worte
170 aufgenommen wurde. 162 aufgenommen wurde.
171 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut 163 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut
172 Seine Manpage 164 Seine Manpage
173 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut/cut.1 165 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut/cut.1
174 erwaehnt bereits die erwartete Konformitaet mit POSIX.2. 166 erwaehnt bereits die erwartete Konformitaet mit POSIX.2.
175 XXX 2 oder 3 modi? 167 XXX 2 oder 3 modi? Draft 9: 2 modi? Draft 11.2 hat 3 modi!
176 Nun sollte man wissen, dass POSIX.2 erst im September 168 Nun sollte man wissen, dass POSIX.2 erst im September
177 1992 veroeffentlicht wurde, also gut zwei Jahren nachdem die 169 1992 veroeffentlicht wurde, also gut zwei Jahren nachdem die
178 Manpage und das Programm geschrieben wurden. Das Programm 170 Manpage und das Programm geschrieben wurden. Das Programm
179 wurde folglich anhand von Arbeitsversionen des Standards 171 wurde folglich anhand von Arbeitsversionen des Standards
180 implementiert. Zweieinhalb Jahre Arbeit war immerhin schon in 172 implementiert. Ein Blick in den Code bekraeftigt diese Vermutung.
181 den Standardisierungsprozess geflossen; bis zur 173 In der Funktion zum parsen der Feldauswahlliste findet sich
182 Fertigstellung sollte es aber noch weitere zwei Jahre dauern. 174 dieser Kommentar:
183 175
184 XXX 176 This parser is less restrictive than the Draft 9 POSIX spec.
185 Schaut man sich die SCCS-IDs (die vom damaligen 177 POSIX doesn't allow lists that aren't in increasing order or
186 Versionskontrollsystem eingefuegt wurden) in den BSD-Quellen an, 178 overlapping lists.
187 dann findet man dort Versionsnummern, die die Entstehung 179
188 dokumentieren: 180 Im Draft 11.2 (1991-09) fordert POSIX diese Flexibilitaet bereits
189 181 ein:
190 4.3BSD-UWisc "@(#)cut.c 1.3"; 182
191 4.3BSD-Reno "@(#)cut.c 5.3 (Berkeley) 6/24/90"; 183 The elements in list can be repeated, can overlap, and can
192 NetBSD "@(#)cut.c 5.4 (Berkeley) 10/30/90"; 184 be specified in any order.
193 FreeBSD "@(#)cut.c 8.1 (Berkeley) 6/6/93"; 185
194 186 Die Versionsnummern und Aenderungsdatums der aelteren
195 Die neueren BSD-Versionen enthalten zwar weiterhin eine SCCS-ID, diese 187 BSD-Implementierungen kann man aus den SCCS-IDs (die vom
196 ist aber bei Version "8.3 (Berkeley) 5/4/95" stehen geblieben. Danach 188 damaligen Versionskontrollsystem in den Code eingefuegt wurden)
197 wurde scheinbar von SCCS auf ein anderes 189 ablesen. So z.B. bei 4.3BSD-Reno: ``5.3 (Berkeley) 6/24/90''.
198 Versionskontrollsystem gewechselt.
199 XXX
200 190
201 Das cut der GNU Coreutils enthaelt folgenden Copyrightvermerk: 191 Das cut der GNU Coreutils enthaelt folgenden Copyrightvermerk:
202 192
203 Copyright (C) 1997-2015 Free Software Foundation, Inc. 193 Copyright (C) 1997-2015 Free Software Foundation, Inc.
204 Copyright (C) 1984 David M. Ihnat 194 Copyright (C) 1984 David M. Ihnat
231 der System V Interface Definition, einer wichtigen formalen 221 der System V Interface Definition, einer wichtigen formalen
232 Beschreibung von UNIX System V, spezifiziert und tauchte 222 Beschreibung von UNIX System V, spezifiziert und tauchte
233 anschliessend in allen relevanten Standards auf. Mit POSIX.2 223 anschliessend in allen relevanten Standards auf. Mit POSIX.2
234 im Jahre 1992 wurde cut zum ersten Mal in der heutigen Form 224 im Jahre 1992 wurde cut zum ersten Mal in der heutigen Form
235 (mit -b) standardisiert. 225 (mit -b) standardisiert.
236 XXX sicher? s.o. 226 XXX sicher?
237 227
238 228
239 Multibyte-Unterstuetzung 229 Multibyte-Unterstuetzung
240 230
241 Nun sind der Bytemodus und die damit verbundene 231 Nun sind der Bytemodus und die damit verbundene
254 244
255 Traditionelle Zwei-Modi-Implementierungen sind z.B. die von 245 Traditionelle Zwei-Modi-Implementierungen sind z.B. die von
256 System III, System V und die aller BSDs bis in die 90er. 246 System III, System V und die aller BSDs bis in die 90er.
257 247
258 Pseudo-Multibyte-Implementierungen bieten GNU und die 248 Pseudo-Multibyte-Implementierungen bieten GNU und die
259 modernen NetBSDs und OpenBSDs. Wie sehr dort ein Schein von 249 modernen NetBSDs und OpenBSDs. Man darf sich durchaus fragen,
260 POSIX-Konformitaet gewahrt wird, ist unterschiedlich. Nicht 250 ob dort ein Schein von POSIX-Konformitaet gewahrt wird.
261 immer findet man klare Aussagen wie diese: 251 Teilweise findet man erst nach genauerer Suche heraus, dass
262 252 -c und -n nicht wie erwartet funktionieren; teilweise machen es
263 /* Since we don't support multi-byte characters, the -c and -b 253 sich die System auch einfach, indem sie auf
264 options are equivalent, and the -n option is meaningless. */ 254 Singlebyte-Zeichenkodierungen beharren, das aber dafuer klar
265 255 darlegen:
266 [ XXX 256
257 Since we don't support multi-byte characters, the -c and -b
258 options are equivalent, and the -n option is meaningless.
259
260 [ openbsd XXX
267 261
268 Tatsaechlich standardkonforme Implementierungen, die 262 Tatsaechlich standardkonforme Implementierungen, die
269 Multibytes korrekt handhaben, bekommt man bei einem modernen 263 Multibytes korrekt handhaben, bekommt man bei einem modernen
270 FreeBSD und bei den Heirloom Tools. Bei FreeBSD hat Tim Robbins 264 FreeBSD und bei den Heirloom Tools. Bei FreeBSD hat Tim Robbins
271 im Sommer 2004 den Zeichenmodus POSIX-konform reimplementiert. 265 im Sommer 2004 den Zeichenmodus POSIX-konform reimplementiert.
390 damit in einer eigenen Funktion umgesetzt. Nur bei der fruehen 384 damit in einer eigenen Funktion umgesetzt. Nur bei der fruehen
391 System III-Implementierung (und seiner 4.3BSD-UWisc-Variante) 385 System III-Implementierung (und seiner 4.3BSD-UWisc-Variante)
392 wird ausser den Fehlerausgaben nichts aus der main-Funktion 386 wird ausser den Fehlerausgaben nichts aus der main-Funktion
393 ausgelagert. 387 ausgelagert.
394 388
395 XXX 389 Cut-Implementierungen haben typischerweise zwei limitierende
396 Bei System III ist die Anzahl der moeglichen Felder und ebenso 390 Groessen: Die Maximalanzahl unterstuetzter Felder und die maximale
397 die Zeilenlaenge auf 512 begrenzt. 4.3BSD-Reno und die BSDs 391 Zeilenlaenge. Bei System III ist die Anzahl der moeglichen Felder
398 der 90er Jahre haben ebenfalls fixe Grenzen (_BSD_LINE_MAX 392 und ebenso die Zeilenlaenge auf 512 begrenzt. 4.3BSD-Reno und die
393 BSDs der 90er Jahre haben ebenfalls fixe Grenzen (_BSD_LINE_MAX
399 bzw. _POSIX2_LINE_MAX). Bei modernen FreeBSDs, NetBSDs, bei 394 bzw. _POSIX2_LINE_MAX). Bei modernen FreeBSDs, NetBSDs, bei
400 allen GNU-Implementierungen und bei Heirloom kann sowohl 395 allen GNU-Implementierungen und bei Heirloom kann sowohl
401 die Felderanzahl als auch die maximale Zeilenlaenge beliebig 396 die Felderanzahl als auch die maximale Zeilenlaenge beliebig
402 gross werden; der Speicher dafür wird dynamisch alloziiert. 397 gross werden; der Speicher dafür wird dynamisch alloziiert.
403 OpenBSD ist ein Hybrid aus fixer Maximalzahl an Feldern, aber 398 OpenBSD ist ein Hybrid aus fixer Maximalzahl an Feldern, aber
404 beliebiger Zeilenlaenge (fgetln). XXX 399 beliebiger Zeilenlaenge. XXX fgetln
400 Die begrenzte Felderanzahl scheint jedeoch kein praktisches
401 Problem darzustellen, da _POSIX2_LINE_MAX mit mindestens 2048
402 durchaus genug Platz bieten sollte.
405 403
406 404
407 Beschreibungen 405 Beschreibungen
408 406
409 Interessant ist auch ein Vergleich der Kurzbeschreibungen von 407 Interessant ist auch ein Vergleich der Kurzbeschreibungen von