Mercurial > docs > cut
annotate cut.txt @ 19:a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Tue, 19 May 2015 08:04:05 +0200 |
parents | b1e7b45fb3c8 |
children | c0e589b92c52 |
rev | line source |
---|---|
6 | 1 cut - cut out selected fields of each line of a file |
2 ---------------------------------------------------- | |
3 markus schnalke <meillo@marmaro.de> | |
4 2015-05 | |
0 | 5 |
6 | |
1 | 7 Cut ist ein klassisches Programm im Unix-Werkzeugkasten. |
8 | 8 In keinem ordentlichen Tutorial zur Shellprogrammierung fehlt |
9 | 9 es, denn es ist ein schoenes, praktisches und anschauliches |
10 Helferlein. Hier soll ein wenig hinter seine Fassade geschaut | |
11 werden. | |
0 | 12 |
13 | |
4 | 14 Funktionsweise |
15 | |
8 | 16 Urspruenglich hatte cut zwei Modi, die spaeter um einen dritten |
9 | 17 erweitert wurden. Cut schneidet entweder gewuenschte Zeichen aus |
18 den Zeilen der Eingabe oder gewuenschte, durch Trennzeichen | |
8 | 19 definierte, Felder. |
0 | 20 |
9 | 21 Der Zeichenmodus ist optimal geeignet um Festbreitenformate zu |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
22 zerteilen. Man kann damit beispielsweise bestimmte |
9 | 23 Zugriffsrechte aus der Ausgabe von `ls -l' ausschneiden, in |
24 diesem Beispiel die Rechte des Besitzers: | |
0 | 25 |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
26 $ ls -l foo |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
27 -rw-rw-r-- 1 meillo users 0 May 12 07:32 foo |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
28 |
4 | 29 $ ls -l foo | cut -c 2-4 |
30 rw- | |
0 | 31 |
4 | 32 Oder die Schreibrechte des Besitzers, der Gruppe und der |
33 Welt: | |
0 | 34 |
4 | 35 $ ls -l | cut -c 3,6,9 |
36 ww- | |
0 | 37 |
4 | 38 Mit cut lassen sich aber auch Strings kuerzen. |
0 | 39 |
10 | 40 $ long=12345678901234567890 |
41 $ echo "$long" | cut -c -10 | |
42 1234567890 | |
0 | 43 |
10 | 44 Dieser Befehl gibt die ersten maximal 10 Zeichen von |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
45 `$long' aus. (Alternativ kann man hierfuer `printf |
10 | 46 "%.10s\n" "$long"' verwenden.) |
0 | 47 |
4 | 48 Geht es aber nicht um die Darstellung von Zeichen, sondern um |
8 | 49 ihre Speicherung, dann ist `-c' nicht unbedingt geeignet. |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
50 Frueher, als US-ASCII noch die omnipraesente Zeichenkodierung |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
51 war, wurde jedes Zeichen mit genau einem |
4 | 52 Byte gespeichert. Somit selektierte `cut -c' gleichermassen |
53 sowohl Ausgabezeichen als auch Bytes. Mit dem Aufkommen von | |
54 Multibyte-Kodierungen (wie UTF-8) musste man sich jedoch von | |
55 dieser Annahme loesen. In diesem Zug bekam cut mit | |
9 | 56 POSIX.2-1992 einen Bytemodus (Option `-b'). Will man |
4 | 57 also nur die ersten maximal 500 Bytes vor dem |
0 | 58 Newline-Zeichen stehen haben (und den Rest stillschweigend |
59 ignorieren), dann macht man das mit: | |
60 | |
6 | 61 $ cut -b -500 |
0 | 62 |
4 | 63 Den Rest kann man sich mit `cut -b 501-' einfangen. Diese |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
64 Funktion ist insbesondere fuer POSIX wichtig, da man damit |
8 | 65 Textdateien mit begrenzter Zeilenlaenge erzeugen kann. |
4 | 66 [ http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html#tag_20_28_17 |
0 | 67 |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
68 Wenn auch der Bytemodus neu eingefuehrt worden war, so sollte |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
69 er sich doch nur so verhalten wie der alte Zeichenmodus |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
70 normalerweise schon implementiert war. Beim Zeichenmodus aber |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
71 wurde eine neue Implementierungsweise gefordert. Das Problem |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
72 war folglich nicht, den neuen Bytemodus zu implementieren, sondern |
10 | 73 den Zeichenmodus neu zu implementieren. |
74 | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
75 Neben dem Zeichen- und Bytemodus bietet cut noch den |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
76 Feldmodus, den man mit `-f' einleitet. Mit ihm |
4 | 77 koennen Felder ausgewaehlt werden. Das Trennzeichen (per |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
78 Default der Tab) kann mit `-d' geaendert werden. Es gilt in |
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
79 gleicher Weise fuer die Eingabe und die Ausgabe. |
0 | 80 |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
81 Der typische Anwendungsfall fuer cut im Feldmodus ist die |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
82 Auswahl von Information aus der passwd-Datei. Hier z.B. der |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
83 Benutzername und seine ID: |
0 | 84 |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
85 $ cut -d: -f1,3 /etc/passwd |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
86 root:0 |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
87 bin:1 |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
88 daemon:2 |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
89 mail:8 |
9 | 90 ... |
0 | 91 |
92 (Die Argumente fuer die Optionen koennen bei cut uebrigens | |
8 | 93 mit Whitespace abgetrennt oder direkt angehaengt folgen.) |
0 | 94 |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
95 Dieser Feldmodus ist fuer einfache tabellarische Dateien, |
4 | 96 wie eben die passwd, gut geeignet. Er kommt aber schnell an |
9 | 97 seine Grenzen. Gerade der haeufige Fall, dass an Whitespace |
0 | 98 in Felder geteilt werden soll, wird damit nicht abgedeckt. |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
99 Der Delimiter kann bei cut nur genau ein Zeichen sein. Es kann |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
100 demnach nicht sowohl an Leerzeichen als auch an Tabs aufgetrennt |
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
101 werden. Zudem unterteilt cut an jedem Trennzeichen. Zwei aneinander |
4 | 102 stehende Trennzeichen fuehren zu einem leeren Feld. Dieses |
8 | 103 Verhalten widerspricht den Erwartungen, die man an die |
104 Verarbeitung einer Datei mit Whitespace-getrennten Feldern | |
105 hat. Manche Implementierungen von cut, z.B. die von FreeBSD, | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
106 haben deshalb Erweiterungen, die das gewuenschte Verhalten |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
107 fuer Whitespace-getrennte Felder bieten. Ansonsten, d.h. wenn |
9 | 108 man portabel bleiben will, verwendet man awk in diesen |
109 Faellen. | |
0 | 110 |
4 | 111 Awk bietet noch eine weitere Funktion, die cut missen |
8 | 112 laesst: Das Tauschen der Feld-Reihenfolge in der Ausgabe. Bei |
113 cut ist die Reihenfolge der Feldauswahlangabe irrelevant; ein | |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
114 Feld kann selbst mehrfach angegeben werden. Dementsprechend gibt |
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
115 der Aufruf |
8 | 116 von `cut -c 5-8,1,4-6' die Zeichen Nummer 1, 4, 5, 6, 7 und 8 |
117 in genau dieser Reihenfolge aus. Die Auswahl entspricht damit | |
118 der Mengenlehre in der Mathematik: Jedes angegebene Feld wird | |
9 | 119 Teil der Ergebnismenge. Die Felder der Ergebnismenge sind |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
120 hierbei immer gleich geordnet wie in der Eingabe. Um die Worte |
16
4d8196c836d8
Referenzen eingefuegt; Todos geprueft
markus schnalke <meillo@marmaro.de>
parents:
15
diff
changeset
|
121 der Manpage von Version 8 Unix wiederzugeben: ``In data base |
9 | 122 parlance, it projects a relation.'' |
16
4d8196c836d8
Referenzen eingefuegt; Todos geprueft
markus schnalke <meillo@marmaro.de>
parents:
15
diff
changeset
|
123 [ http://man.cat-v.org/unix_8th/1/cut |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
124 Cut fuehrt demnach die Datenbankoperation Projektion auf |
10 | 125 Textdateien aus. Die Wikipedia erklaert das folgendermassen: |
7 | 126 |
127 Die Projektion entspricht der Projektionsabbildung aus der | |
128 Mengenlehre und kann auch Attributbeschränkung genannt | |
129 werden. Sie extrahiert einzelne Attribute aus der | |
130 ursprünglichen Attributmenge und ist somit als eine Art | |
131 Selektion auf Spaltenebene zu verstehen, das heißt, die | |
132 Projektion blendet Spalten aus. | |
133 | |
8 | 134 [ http://de.wikipedia.org/wiki/Projektion_(Informatik)#Projektion |
135 | |
7 | 136 |
0 | 137 Geschichtliches |
138 | |
4 | 139 Cut erblickte 1982 mit dem Release von UNIX System III das |
140 Licht der oeffentlichen Welt. Wenn man die Quellen von System | |
141 III durchforstet, findet man die Quellcodedatei cut.c mit dem | |
142 Zeitstempel 1980-04-11. | |
1 | 143 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=SysIII/usr/src/cmd |
4 | 144 Das ist die aelteste Manifestation des Programms, die ich |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
145 aufstoebern konnte. Allerdings spricht die SCCS-ID im |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
146 Quellcode von Version 1.5. Es muss demzufolge noch eine |
8 | 147 Vorgeschichte geben. Zu dieser habe ich leider keinen Zugang |
148 gefunden. | |
9 | 149 XXX mail an TUHS |
0 | 150 |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
151 Nun ein Blick auf die BSD-Linie: Dort ist mein fruehester |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
152 Fund ein cut.c mit dem Dateimodifikationsdatum 1986-11-07 |
8 | 153 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-UWisc/src/usr.bin/cut |
154 als Teil der Spezialversion 4.3BSD-UWisc, | |
6 | 155 [ http://gunkies.org/wiki/4.3_BSD_NFS_Wisconsin_Unix |
156 die im Januar 1987 veroeffentlicht wurde. | |
8 | 157 Die Implementierung unterscheidet sich nur minimal von der |
158 in System III. | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
159 Im bekannteren 4.3BSD-Tahoe (1988) tauchte cut nicht auf. |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
160 Das darauf folgende 4.3BSD-Reno (1990) lieferte aber wieder |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
161 ein cut mit aus. Dieses cut war ein von Adam S. Moskowitz und |
8 | 162 Marciano Pitargue neu implementiertes cut, das 1989 in BSD |
163 aufgenommen wurde. | |
1 | 164 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut |
4 | 165 Seine Manpage |
1 | 166 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut/cut.1 |
4 | 167 erwaehnt bereits die erwartete Konformitaet mit POSIX.2. |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
168 Nun muss man wissen, dass POSIX.2 erst im September |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
169 1992 veroeffentlicht wurde, erst gut zwei Jahren nachdem die |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
170 Manpage und das Programm geschrieben worden waren. Das Programm |
10 | 171 wurde folglich anhand von Arbeitsversionen des Standards |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
172 implementiert. Ein Blick in den Code bekraeftigt diese Vermutung. |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
173 In der Funktion zum parsen der Feldauswahlliste findet sich |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
174 dieser Kommentar: |
0 | 175 |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
176 This parser is less restrictive than the Draft 9 POSIX spec. |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
177 POSIX doesn't allow lists that aren't in increasing order or |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
178 overlapping lists. |
12 | 179 |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
180 Im Draft 11.2 (1991-09) fordert POSIX diese Flexibilitaet bereits |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
181 ein: |
9 | 182 |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
183 The elements in list can be repeated, can overlap, and can |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
184 be specified in any order. |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
185 |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
186 Zudem listet Draft 11.2 alle drei Modi, waehrend in diesem |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
187 BSD cut nur die zwei alten implementiert sind. Es koennte also |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
188 sein, dass in Draft 9 der Bytemodus noch nicht vorhanden war. |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
189 Da ich keinen Zugang zu Draft 9 oder 10 finden konnte, war es mir |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
190 leider nicht moeglich, diese Vermutung zu pruefen. XXX |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
191 |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
192 Die Versionsnummern und Aenderungsdaten der aelteren |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
193 BSD-Implementierungen kann man aus den SCCS-IDs, die vom |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
194 damaligen Versionskontrollsystem in den Code eingefuegt wurden, |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
195 ablesen. So z.B. bei 4.3BSD-Reno: ``5.3 (Berkeley) 6/24/90''. |
12 | 196 |
197 Das cut der GNU Coreutils enthaelt folgenden Copyrightvermerk: | |
198 | |
199 Copyright (C) 1997-2015 Free Software Foundation, Inc. | |
200 Copyright (C) 1984 David M. Ihnat | |
201 | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
202 Der Code hat also recht alte Urspruenge. Wie aus weiteren |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
203 Kommentaren zu entnehmen ist, wurde der Programmcode zuerst von David |
12 | 204 MacKenzie und spaeter von Jim Meyering ueberarbeitet. Letzterer |
205 hat den Code 1992 auch ins Versionkontrollsystem eingestellt. | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
206 Weshalb die Jahre vor 1997, zumindest ab 1992, nicht im |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
207 Copyright-Vermerk auftauchen, ist unklar. |
12 | 208 |
209 Trotz der vielen Jahreszahlen aus den 80er Jahren gehoert cut, | |
10 | 210 aus Sicht des urspruenglichen Unix, zu den juengeren Tools. |
1 | 211 Wenn cut auch ein Jahrzehnt aelter als Linux, der Kernel, ist, |
4 | 212 so war Unix doch schon ueber zehn Jahre alt, als cut das |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
213 erste Mal auftauchte. Insbesondere gehoerte cut noch nicht |
4 | 214 zu Version 7 Unix, das die Ausgangsbasis aller modernen |
215 Unix-Systeme darstellt. Die weit komplexeren Programme sed | |
216 und awk waren dort schon vertreten. Man muss sich also | |
217 fragen, warum cut ueberhaupt noch entwickelt wurde, wo es | |
9 | 218 schon zwei Programme gab, die die Funktion von cut abdecken |
219 konnten. Ein Argument fuer cut war sicher seine Kompaktheit und | |
4 | 220 die damit verbundene Geschwindigkeit gegenueber dem damals |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
221 traegen awk. Diese schlanke Gestalt ist es auch, die der |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
222 Unix-Philosopie entspricht: Mache eine Aufgabe und die richtig! |
9 | 223 Cut ueberzeugte. Es wurde in andere Unix Varianten uebernommen, |
224 standardisiert und ist heutzutage ueberall anzutreffen. | |
1 | 225 |
9 | 226 Die urspruengliche Variante (ohne -b) wurde schon 1985 in |
5 | 227 der System V Interface Definition, einer wichtigen formalen |
9 | 228 Beschreibung von UNIX System V, spezifiziert und tauchte |
229 anschliessend in allen relevanten Standards auf. Mit POSIX.2 | |
230 im Jahre 1992 wurde cut zum ersten Mal in der heutigen Form | |
231 (mit -b) standardisiert. | |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
232 XXX sicher? |
2 | 233 |
234 | |
9 | 235 Multibyte-Unterstuetzung |
8 | 236 |
237 Nun sind der Bytemodus und die damit verbundene | |
238 Multibyte-Verarbeitung des POSIX-Zeichenmodus bereits seit | |
239 1992 standardisiert, wie steht es aber mit deren Umsetzung? | |
10 | 240 Welche Versionen implementieren POSIX korrekt? |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
241 Die Situation ist dreiteilig: Es gibt historische |
8 | 242 Implementierungen, die nur -c und -f kennen. Dann gibt es |
10 | 243 Implementierungen die -b zwar kennen, es aber lediglich als Alias |
8 | 244 fuer -c handhaben. Diese Implementierungen funktionieren mit |
245 Single-Byte-Encodings (z.B. US-ASCII, Latin1) korrekt, bei | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
246 Multibyte-Encodings (z.B. UTF-8) verhaelt sich ihr -c aber |
8 | 247 wie -b (und -n wird ignoriert). Schliesslich gibt es noch |
248 Implementierungen, die -b und -c tatsaechlich POSIX-konform | |
249 implementieren. | |
250 | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
251 Historische Zwei-Modi-Implementierungen sind z.B. die von |
8 | 252 System III, System V und die aller BSDs bis in die 90er. |
253 | |
10 | 254 Pseudo-Multibyte-Implementierungen bieten GNU und die |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
255 modernen NetBSDs und OpenBSDs. Man darf sich sicher fragen, |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
256 ob dort ein Schein von POSIX-Konformitaet gewahrt wird. |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
257 Teilweise findet man erst nach genauerer Suche heraus, dass |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
258 -c und -n nicht wie erwartet funktionieren; teilweise machen es |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
259 sich die Systeme auch einfach, indem sie auf |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
260 Singlebyte-Zeichenkodierungen beharren, das aber dafuer meist |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
261 klar darlegen: |
8 | 262 |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
263 Since we don't support multi-byte characters, the -c and -b |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
264 options are equivalent, and the -n option is meaningless. |
8 | 265 |
16
4d8196c836d8
Referenzen eingefuegt; Todos geprueft
markus schnalke <meillo@marmaro.de>
parents:
15
diff
changeset
|
266 [ http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/cut/cut.c?rev=1.18&content-type=text/x-cvsweb-markup |
8 | 267 |
268 Tatsaechlich standardkonforme Implementierungen, die | |
269 Multibytes korrekt handhaben, bekommt man bei einem modernen | |
270 FreeBSD und bei den Heirloom Tools. Bei FreeBSD hat Tim Robbins | |
9 | 271 im Sommer 2004 den Zeichenmodus POSIX-konform reimplementiert. |
8 | 272 [ https://svnweb.freebsd.org/base?view=revision&revision=131194 |
273 Warum die beiden anderen grossen BSDs diese Aenderung nicht | |
274 uebernommen haben, bleibt offen. Es scheint aber an der im | |
275 obigen Kommentar formulierten Grundausrichtung zu liegen. | |
276 | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
277 Wie findet man nun als Nutzer heraus, ob beim cut(1) des eigenen |
8 | 278 Systems Multibytes korrekt unterstuetzt werden? Zuerst ist |
279 entscheidend, ob das System selbst mit einem Multibyte-Encoding | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
280 arbeitet, denn tut es das nicht, dann entsprechen sich |
9 | 281 Zeichen und Bytes und die Frage eruebrigt sich. Man kann das |
282 herausfinden indem man sich das Locale anschaut, aber einfacher | |
283 ist es, ein typisches Mehrbytezeichen, wie z.B. einen Umlaut, | |
284 auszugeben und zu schauen ob dieses in einem oder in mehreren | |
285 Bytes kodiert ist: | |
8 | 286 |
287 $ echo ä | od -c | |
288 0000000 303 244 \n | |
289 0000003 | |
290 | |
291 In diesem Fall sind es zwei Bytes: oktal 303 und 244 . (Den | |
292 Zeilenumbruch fuegt echo(1) hinzu.) | |
293 | |
9 | 294 Mit dem Programm iconv(1) kann man Text explizit in bestimmte |
10 | 295 Kodierungen konvertieren. Hier Beispiele, wie die Ausgabe |
296 bei Latin1 und wie sie bei UTF-8 aussieht. | |
8 | 297 |
298 $ echo ä | iconv -t latin1 | od -c | |
299 0000000 344 \n | |
300 0000002 | |
301 | |
302 $ echo ä | iconv -t utf8 | od -c | |
303 0000000 303 244 \n | |
304 0000003 | |
305 | |
306 Die Ausgabe auf dem eigenen System (ohne die iconv-Konvertierung) | |
307 wird recht sicher einer dieser beiden Ausgaben entsprechen. | |
308 | |
309 Nun zum Test der cut-Implementierung. Hat man ein UTF-8-System, | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
310 dann sollte sich eine POSIX-konforme Implementierung folgendermassen |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
311 verhalten: |
8 | 312 |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
313 $ echo ä | cut -c 1 | od -c |
10 | 314 0000000 303 244 \n |
8 | 315 0000003 |
316 | |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
317 $ echo ä | cut -b 1 | od -c |
10 | 318 0000000 303 \n |
8 | 319 0000002 |
320 | |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
321 $ echo ä | cut -b 1 -n | od -c |
10 | 322 0000000 \n |
323 0000001 | |
324 | |
325 Bei einer Pseudo-POSIX-Implementierung ist die Ausgabe in | |
326 allen drei Faellen wie die mittlere: Es wird das erste Byte | |
327 ausgegeben. | |
8 | 328 |
329 | |
330 Implementierungen | |
331 | |
9 | 332 Nun ein Blick auf den Code. Betrachtet wird eine Auswahl an |
333 Implementierungen. | |
334 | |
335 Fuer einen ersten Eindruck ist der Umfang des Quellcodes | |
336 hilfreich. Typischerweise steigt dieser ueber die Jahre an. Diese | |
8 | 337 Beobachtung kann hier in der Tendenz, aber nicht in jedem Fall, |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
338 bestaetigt werden. Die POSIX-konforme Umsetzung des Zeichenmodus |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
339 erfordert zwangslaeufig mehr Code, deshalb sind diese |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
340 Implementierungen tendenziell umfangreicher. |
8 | 341 |
342 | |
9 | 343 SLOC Zeilen Bytes Gehoert zu Dateidatum Kategorie |
344 ----------------------------------------------------------------- | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
345 116 123 2966 System III 1980-04-11 (hist) |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
346 118 125 3038 4.3BSD-UWisc 1986-11-07 (hist) |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
347 200 256 5715 4.3BSD-Reno 1990-06-25 (hist) |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
348 200 270 6545 NetBSD 1993-03-21 (hist) |
9 | 349 218 290 6892 OpenBSD 2008-06-27 (pseudo) |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
350 224 296 6920 FreeBSD 1994-05-27 (hist) |
9 | 351 232 306 7500 NetBSD 2014-02-03 (pseudo) |
352 340 405 7423 Heirloom 2012-05-20 (POSIX) | |
353 382 586 14175 GNU coreutils 1992-11-08 (pseudo) | |
354 391 479 10961 FreeBSD 2012-11-24 (POSIX) | |
355 588 830 23167 GNU coreutils 2015-05-01 (pseudo) | |
8 | 356 |
357 | |
9 | 358 Das Kandidatenfeld teilt sich grob in vier Gruppen: (1) Die zwei |
359 urspruenglichen Implementierungen, die sich nur minimal | |
360 unterscheiden, mit gut 100 SLOCs. (2) Die fuenf BSD-Versionen mit | |
361 gut 200 SLOCs. (3) Die zwei POSIX-konformen Programme und | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
362 die alte GNU-Version mit 340-390 SLOCs. Und schliesslich (4) die |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
363 moderne GNU-Variante mit fast 600 SLOCs. |
9 | 364 |
365 Die Abweichung zwischen logischen Codezeilen (SLOC, ermittelt mit | |
366 SLOCcount) und der Anzahl von Zeilenumbruechen in der Datei (`wc | |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
367 -l') erstreckt sich ueber eine Spanne von Faktor 1.06 bei den |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
368 aeltesten Vertretern bis zu Faktor 1.5 bei GNU. Den groessten |
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
369 Einfluss darauf haben Leerzeilen, reine Kommentarzeilen und |
9 | 370 die Groesse des Lizenzblocks am Dateianfang. |
371 | |
372 Betrachtet man die Abweichungen zwischen den logischen Codezeilen | |
373 und der Dateigroesse (`wc -c'), so pendelt das Teilnehmerfeld | |
374 zwischen 25 und 30 Bytes je Anweisung. Die Heirloom-Implementierung | |
375 weicht mit nur 21 nach unten ab, die GNU-Implementierungen mit | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
376 fast 40 nach oben. Bei GNU liegt dies hauptsaechlich an deren |
9 | 377 Programmierstil, mit spezieller Einrueckung und langen Bezeichnern. |
378 Ob man die Heirloom-Implementierung als besonders kryptisch | |
379 oder als besonders elegant bezeichnen will, das soll der | |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
380 eigenen Einschaetzung des Lesers ueberlassen bleiben. Vor allem |
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
381 der Vergleich mit einer GNU-Implementierung ist eindrucksvoll. |
8 | 382 |
383 | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
384 Die interne Struktur der Programmcodes (in C) ist meist aehnlich. |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
385 Neben der obligatorischen main-Funktion, die die Kommandozeilenargumente |
11 | 386 verarbeitet, gibt es im Normalfall eine Funktion, die die |
13 | 387 Feldauswahl in eine interne Datenstruktur ueberfuehrt. Desweiteren |
11 | 388 haben fast alle Implementierungen separate Funktionen fuer die |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
389 zwei oder drei Modi. Bei den POSIX-konformen Implementierungen |
11 | 390 wird die `-b -n'-Kombination als weiterer Modus behandelt, und |
391 damit in einer eigenen Funktion umgesetzt. Nur bei der fruehen | |
392 System III-Implementierung (und seiner 4.3BSD-UWisc-Variante) | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
393 wird ausser den Fehlerausgaben alles in der main-Funktion |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
394 erledigt. |
11 | 395 |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
396 Cut-Implementierungen haben typischerweise zwei limitierende |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
397 Groessen: Die Maximalanzahl unterstuetzter Felder und die maximale |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
398 Zeilenlaenge. Bei System III sind beide Groessen auf 512 begrenzt. |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
399 4.3BSD-Reno und die BSDs der 90er Jahre haben ebenfalls fixe |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
400 Grenzen (_BSD_LINE_MAX bzw. _POSIX2_LINE_MAX). Bei modernen |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
401 FreeBSDs, NetBSDs, bei allen GNU-Implementierungen und bei |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
402 Heirloom kann sowohl die Felderanzahl als auch die maximale |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
403 Zeilenlaenge beliebig gross werden; der Speicher dafuer wird |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
404 dynamisch alloziiert. OpenBSD ist ein Hybrid aus fixer |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
405 Maximalzahl an Feldern, aber beliebiger Zeilenlaenge. Die |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
406 begrenzte Felderanzahl scheint jedoch kein Praxisproblem |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
407 darzustellen, da _POSIX2_LINE_MAX mit mindestens 2048 durchaus |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
408 gross genug sein sollte. |
11 | 409 |
8 | 410 |
2 | 411 Beschreibungen |
412 | |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
413 Interessant ist zudem ein Vergleich der Kurzbeschreibungen von |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
414 cut, wie sie sich in der Titelzeile der Manpages oder manchmal |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
415 am Anfang der Quellcodedatei finden. Die folgende Liste |
9 | 416 ist grob zeitlich geordnet und nach Abstammung gruppiert: |
3 | 417 |
418 | |
2 | 419 System III cut out selected fields of each line of a file |
3 | 420 System III (src) cut and paste columns of a table (projection of a relation) |
2 | 421 System V cut out selected fields of each line of a file |
422 HP-UX cut out (extract) selected fields of each line of a file | |
423 | |
3 | 424 4.3BSD-UWisc (src) cut and paste columns of a table (projection of a relation) |
2 | 425 4.3BSD-Reno select portions of each line of a file |
426 NetBSD select portions of each line of a file | |
7 | 427 OpenBSD 4.6 select portions of each line of a file |
2 | 428 FreeBSD 1.0 select portions of each line of a file |
10 | 429 FreeBSD 10.0 cut out selected portions of each line of a file |
2 | 430 SunOS 4.1.3 remove selected fields from each line of a file |
431 SunOS 5.5.1 cut out selected fields of each line of a file | |
432 | |
8 | 433 Heirloom Tools cut out selected fields of each line of a file |
9 | 434 Heirloom Tools (src) cut out fields of lines of files |
2 | 435 |
436 GNU coreutils remove sections from each line of files | |
437 | |
438 Minix select out columns of a file | |
439 | |
440 Version 8 Unix rearrange columns of data | |
441 ``Unix Reader'' rearrange columns of text | |
1 | 442 |
9 | 443 POSIX cut out selected fields of each line of a file |
1 | 444 |
9 | 445 |
446 Die mit ``(src)'' markierten Beschreibungen sind aus dem | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
447 jeweiligen Quellcode entnommen. Der POSIX-Eintrag enthaelt |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
448 die Beschreibung im Standard. Der ``Unix Reader'' ist ein |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
449 rueckblickendes Textdokument von Doug McIlroy, das das |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
450 Auftreten der Tools in der Geschichte des Research Unix zum |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
451 Thema hat. |
16
4d8196c836d8
Referenzen eingefuegt; Todos geprueft
markus schnalke <meillo@marmaro.de>
parents:
15
diff
changeset
|
452 [ http://doc.cat-v.org/unix/unix-reader/contents.pdf |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
453 Eigentlich sollte seine Beschreibung der in Version 8 Unix |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
454 entsprechen. Die Abweichung koennte ein Uebertragungsfehler |
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
455 oder eine nachtraegliche Korrektur sein. Alle uebrigen |
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
456 Beschreibungen entstammen den Manpages. |
5 | 457 |
9 | 458 Oft ist mit der Zeit die POSIX-Beschreibung uebernommen |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
459 oder an sie angeglichen worden, wie beispielsweise bei FreeBSD. |
5 | 460 [ https://svnweb.freebsd.org/base?view=revision&revision=167101 |
461 | |
7 | 462 Interessant ist, dass die GNU coreutils seit Anbeginn vom |
5 | 463 Entfernen von Teilen der Eingabe sprechen, wohingegen die |
464 Kommandozeilenangabe klar ein Auswaehlen darstellt. Die | |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
465 Worte ``cut out'' sind vielleicht auch zu missverstaendlich. |
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
466 HP-UX hat sie deshalb praezisiert. |
5 | 467 |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
468 Beim Begriff, was selektiert wird, ist man sich ebenfalls |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
469 uneins. Die Einen reden von Feldern (POSIX), Andere von |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
470 Abschnitten bzw. Teilen (BSD) und wieder Andere von Spalten |
5 | 471 (Research Unix). Ironischerweise leistet sich gerade Version |
472 8 Unix, das eigentlich um eine sehr treffende Weltsicht | |
473 bemueht ist, mit ``rearrange columns of data'' die | |
474 unzutreffendste der Beschreibungen. | |
475 | |
476 | |
6 | 477 Autoreninfo |
478 | |
479 Markus Schnalke interessiert sich fuer die Hintergruende | |
480 von Unix und seinen Werkzeugen. Fuer die Erarbeitung dieses | |
481 Textes wurde er regelrecht zum Historiker. | |
482 | |
483 | |
484 Lizenz | |
10 | 485 |
6 | 486 CC0 (und kann damit auch unter CC BY-SA 4.0 Unported |
487 veroeffentlicht werden) |