Mercurial > docs > cut
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 |