annotate cut.txt @ 18:b1e7b45fb3c8

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