annotate cut.txt @ 21:bac481be86d7

Umlaute konvertiert
author markus schnalke <meillo@marmaro.de>
date Thu, 28 May 2015 06:41:08 +0200
parents c0e589b92c52
children 4193939c6a24
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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
9 es, denn es ist ein schönes, praktisches und anschauliches
9
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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
16 Ursprünglich hatte cut zwei Modi, die später um einen dritten
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
17 erweitert wurden. Cut schneidet entweder gewünschte Zeichen aus
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
18 den Zeilen der Eingabe oder gewünschte, 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
19
a62964d0cc54 Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 18
diff changeset
22 zerteilen. Man kann 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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
38 Mit cut lassen sich aber auch Strings kürzen.
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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
45 `$long' aus. (Alternativ kann man hierfür `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.
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
50 Früher, als US-ASCII noch die omnipräsente Zeichenkodierung
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
51 war, wurde jedes Zeichen mit genau einem
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
52 Byte gespeichert. Somit selektierte `cut -c' gleichermaßen
4
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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
55 dieser Annahme lösen. 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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
64 Funktion ist insbesondere für POSIX wichtig, da man damit
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
65 Textdateien mit begrenzter Zeilenlänge 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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
68 Wenn auch der Bytemodus neu eingeführt worden war, so sollte
17
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
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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
77 können Felder ausgewählt werden. Das Trennzeichen (per
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
78 Default der Tab) kann mit `-d' geändert werden. Es gilt in
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
79 gleicher Weise für die Eingabe und die Ausgabe.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
80
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
81 Der typische Anwendungsfall für 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
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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
92 (Die Argumente für die Optionen können bei cut übrigens
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
93 mit Whitespace abgetrennt oder direkt angehängt folgen.)
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
94
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
95 Dieser Feldmodus ist für 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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
97 seine Grenzen. Gerade der häufige 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
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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
102 stehende Trennzeichen führen 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,
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
106 haben deshalb Erweiterungen, die das gewünschte Verhalten
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
107 für 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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
109 Fällen.
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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
112 lässt: Das Tauschen der Feld-Reihenfolge in der Ausgabe. Bei
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
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
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
116 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
117 in genau dieser Reihenfolge aus. Die Auswahl entspricht damit
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
118 der Mengenlehre in der Mathematik: Jedes angegebene Feld wird
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
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
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
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
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
124 Cut führt demnach die Datenbankoperation Projektion auf
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
125 Textdateien aus. Die Wikipedia erklärt das folgendermaßen:
7
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
126
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
127 Die Projektion entspricht der Projektionsabbildung aus der
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
128 Mengenlehre und kann auch Attributbeschränkung genannt
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
129 werden. Sie extrahiert einzelne Attribute aus der
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
130 ursprünglichen Attributmenge und ist somit als eine Art
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
131 Selektion auf Spaltenebene zu verstehen, das heißt, die
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
132 Projektion blendet Spalten aus.
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
133
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
134 [ http://de.wikipedia.org/wiki/Projektion_(Informatik)#Projektion
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
135
7
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
136
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
137 Geschichtliches
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
138
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
139 Cut erblickte 1982 mit dem Release von UNIX System III das
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
140 Licht der öffentlichen Welt. Wenn man die Quellen von System
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
141 III durchforstet, findet man die Quellcodedatei cut.c mit dem
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
142 Zeitstempel 1980-04-11.
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
143 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=SysIII/usr/src/cmd
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
144 Das ist die älteste Manifestation des Programms, die ich
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
145 aufstöbern konnte. Allerdings spricht die SCCS-ID im
20
c0e589b92c52 Vorgeschichte von cut in PWB/UNIX behandelt
markus schnalke <meillo@marmaro.de>
parents: 19
diff changeset
146 Quellcode von Version 1.5. Die Vorgeschichte liegt, der Aussage
c0e589b92c52 Vorgeschichte von cut in PWB/UNIX behandelt
markus schnalke <meillo@marmaro.de>
parents: 19
diff changeset
147 Doug McIlroys
c0e589b92c52 Vorgeschichte von cut in PWB/UNIX behandelt
markus schnalke <meillo@marmaro.de>
parents: 19
diff changeset
148 [ XXX
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
149 zufolge, in PWB/UNIX, das die Grundlage für System III war.
20
c0e589b92c52 Vorgeschichte von cut in PWB/UNIX behandelt
markus schnalke <meillo@marmaro.de>
parents: 19
diff changeset
150 (PWB 3.0 entspricht System III.) In den von PWB 1.0 (1977)
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
151 verfügbaren Quellen
20
c0e589b92c52 Vorgeschichte von cut in PWB/UNIX behandelt
markus schnalke <meillo@marmaro.de>
parents: 19
diff changeset
152 [ XXX
c0e589b92c52 Vorgeschichte von cut in PWB/UNIX behandelt
markus schnalke <meillo@marmaro.de>
parents: 19
diff changeset
153 ist cut noch nicht zu finden; von PWB 2.0 sind mir keine
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
154 verfügbaren Quellen oder hilfreiche Dokumentation bekannt.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
155
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
156 Nun ein Blick auf die BSD-Linie: Dort ist mein frühester
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
157 Fund ein cut.c mit dem Dateimodifikationsdatum 1986-11-07
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
158 [ 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
159 als Teil der Spezialversion 4.3BSD-UWisc,
6
bf2ac5df0063 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 5
diff changeset
160 [ http://gunkies.org/wiki/4.3_BSD_NFS_Wisconsin_Unix
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
161 die im Januar 1987 veröffentlicht wurde.
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
162 Die Implementierung unterscheidet sich nur minimal von der
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
163 in System III.
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
164 Im bekannteren 4.3BSD-Tahoe (1988) tauchte cut nicht auf.
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
165 Das darauf folgende 4.3BSD-Reno (1990) lieferte aber wieder
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
166 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
167 Marciano Pitargue neu implementiertes cut, das 1989 in BSD
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
168 aufgenommen wurde.
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
169 [ 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
170 Seine Manpage
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
171 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut/cut.1
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
172 erwähnt bereits die erwartete Konformität mit POSIX.2.
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
173 Nun muss man wissen, dass POSIX.2 erst im September
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
174 1992 veröffentlicht wurde, erst gut zwei Jahren nachdem die
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
175 Manpage und das Programm geschrieben worden waren. Das Programm
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
176 wurde folglich anhand von Arbeitsversionen des Standards
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
177 implementiert. Ein Blick in den Code bekräftigt diese Vermutung.
15
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
178 In der Funktion zum parsen der Feldauswahlliste findet sich
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
179 dieser Kommentar:
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
180
15
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
181 This parser is less restrictive than the Draft 9 POSIX spec.
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
182 POSIX doesn't allow lists that aren't in increasing order or
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
183 overlapping lists.
12
9f17c512fb5c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 11
diff changeset
184
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
185 Im Draft 11.2 (1991-09) fordert POSIX diese Flexibilität bereits
15
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
186 ein:
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
187
15
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
188 The elements in list can be repeated, can overlap, and can
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
189 be specified in any order.
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
190
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
191 Zudem listet Draft 11.2 alle drei Modi, während in diesem
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
192 BSD cut nur die zwei alten implementiert sind. Es könnte also
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
193 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
194 Da ich keinen Zugang zu Draft 9 oder 10 finden konnte, war es mir
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
195 leider nicht möglich, diese Vermutung zu prüfen.
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
196
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
197 Die Versionsnummern und Änderungsdaten der älteren
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
198 BSD-Implementierungen kann man aus den SCCS-IDs, die vom
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
199 damaligen Versionskontrollsystem in den Code eingefügt wurden,
15
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
200 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
201
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
202 Das cut der GNU Coreutils enthält folgenden Copyrightvermerk:
12
9f17c512fb5c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 11
diff changeset
203
9f17c512fb5c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 11
diff changeset
204 Copyright (C) 1997-2015 Free Software Foundation, Inc.
9f17c512fb5c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 11
diff changeset
205 Copyright (C) 1984 David M. Ihnat
9f17c512fb5c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 11
diff changeset
206
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
207 Der Code hat also recht alte Ursprünge. Wie aus weiteren
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
208 Kommentaren zu entnehmen ist, wurde der Programmcode zuerst von David
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
209 MacKenzie und später von Jim Meyering überarbeitet. Letzterer
12
9f17c512fb5c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 11
diff changeset
210 hat den Code 1992 auch ins Versionkontrollsystem eingestellt.
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
211 Weshalb die Jahre vor 1997, zumindest ab 1992, nicht im
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
212 Copyright-Vermerk auftauchen, ist unklar.
12
9f17c512fb5c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 11
diff changeset
213
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
214 Trotz der vielen Jahreszahlen aus den 80er Jahren gehört cut,
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
215 aus Sicht des ursprünglichen Unix, zu den jüngeren Tools.
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
216 Wenn cut auch ein Jahrzehnt älter als Linux, der Kernel, ist,
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
217 so war Unix doch schon über zehn Jahre alt, als cut das
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
218 erste Mal auftauchte. Insbesondere gehörte cut noch nicht
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
219 zu Version 7 Unix, das die Ausgangsbasis aller modernen
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
220 Unix-Systeme darstellt. Die weit komplexeren Programme sed
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
221 und awk waren dort schon vertreten. Man muss sich also
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
222 fragen, warum cut überhaupt noch entwickelt wurde, wo es
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
223 schon zwei Programme gab, die die Funktion von cut abdecken
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
224 konnten. Ein Argument für cut war sicher seine Kompaktheit und
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
225 die damit verbundene Geschwindigkeit gegenüber dem damals
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
226 trägen awk. Diese schlanke Gestalt ist es auch, die der
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
227 Unix-Philosopie entspricht: Mache eine Aufgabe und die richtig!
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
228 Cut überzeugte. Es wurde in andere Unix Varianten übernommen,
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
229 standardisiert und ist heutzutage überall anzutreffen.
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
230
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
231 Die ursprüngliche Variante (ohne -b) wurde schon 1985 in
5
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
232 der System V Interface Definition, einer wichtigen formalen
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
233 Beschreibung von UNIX System V, spezifiziert und tauchte
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
234 anschließend in allen relevanten Standards auf. Mit POSIX.2
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
235 im Jahre 1992 wurde cut zum ersten Mal in der heutigen Form
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
236 (mit -b) standardisiert.
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
237
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
238
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
239 Multibyte-Unterstützung
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
240
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
241 Nun sind der Bytemodus und die damit verbundene
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
242 Multibyte-Verarbeitung des POSIX-Zeichenmodus bereits seit
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
243 1992 standardisiert, wie steht es aber mit deren Umsetzung?
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
244 Welche Versionen implementieren POSIX korrekt?
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
245 Die Situation ist dreiteilig: Es gibt historische
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
246 Implementierungen, die nur -c und -f kennen. Dann gibt es
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
247 Implementierungen die -b zwar kennen, es aber lediglich als Alias
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
248 für -c handhaben. Diese Implementierungen funktionieren mit
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
249 Single-Byte-Encodings (z.B. US-ASCII, Latin1) korrekt, bei
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
250 Multibyte-Encodings (z.B. UTF-8) verhält sich ihr -c aber
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
251 wie -b (und -n wird ignoriert). Schließlich gibt es noch
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
252 Implementierungen, die -b und -c tatsächlich POSIX-konform
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
253 implementieren.
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
254
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
255 Historische Zwei-Modi-Implementierungen sind z.B. die von
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
256 System III, System V und die aller BSDs bis in die 90er.
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
257
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
258 Pseudo-Multibyte-Implementierungen bieten GNU und die
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
259 modernen NetBSDs und OpenBSDs. Man darf sich sicher fragen,
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
260 ob dort ein Schein von POSIX-Konformität gewahrt wird.
15
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
261 Teilweise findet man erst nach genauerer Suche heraus, dass
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
262 -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
263 sich die Systeme auch einfach, indem sie auf
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
264 Singlebyte-Zeichenkodierungen beharren, das aber dafür meist
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
265 klar darlegen:
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
266
15
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
267 Since we don't support multi-byte characters, the -c and -b
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
268 options are equivalent, and the -n option is meaningless.
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
269
16
4d8196c836d8 Referenzen eingefuegt; Todos geprueft
markus schnalke <meillo@marmaro.de>
parents: 15
diff changeset
270 [ 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
271
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
272 Tatsächlich standardkonforme Implementierungen, die
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
273 Multibytes korrekt handhaben, bekommt man bei einem modernen
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
274 FreeBSD und bei den Heirloom Tools. Bei FreeBSD hat Tim Robbins
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
275 im Sommer 2004 den Zeichenmodus POSIX-konform reimplementiert.
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
276 [ https://svnweb.freebsd.org/base?view=revision&revision=131194
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
277 Warum die beiden anderen großen BSDs diese Änderung nicht
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
278 übernommen haben, bleibt offen. Es scheint aber an der im
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
279 obigen Kommentar formulierten Grundausrichtung zu liegen.
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
280
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
281 Wie findet man nun als Nutzer heraus, ob beim cut(1) des eigenen
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
282 Systems Multibytes korrekt unterstützt werden? Zuerst ist
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
283 entscheidend, ob das System selbst mit einem Multibyte-Encoding
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
284 arbeitet, denn tut es das nicht, dann entsprechen sich
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
285 Zeichen und Bytes und die Frage erübrigt sich. Man kann das
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
286 herausfinden indem man sich das Locale anschaut, aber einfacher
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
287 ist es, ein typisches Mehrbytezeichen, wie z.B. einen Umlaut,
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
288 auszugeben und zu schauen ob dieses in einem oder in mehreren
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
289 Bytes kodiert ist:
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
290
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
291 $ echo ä | od -c
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
292 0000000 303 244 \n
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
293 0000003
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
294
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
295 In diesem Fall sind es zwei Bytes: oktal 303 und 244 . (Den
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
296 Zeilenumbruch fügt echo(1) hinzu.)
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
297
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
298 Mit dem Programm iconv(1) kann man Text explizit in bestimmte
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
299 Kodierungen konvertieren. Hier Beispiele, wie die Ausgabe
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
300 bei Latin1 und wie sie bei UTF-8 aussieht.
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
301
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
302 $ echo ä | iconv -t latin1 | od -c
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
303 0000000 344 \n
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
304 0000002
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
305
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
306 $ echo ä | iconv -t utf8 | od -c
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
307 0000000 303 244 \n
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
308 0000003
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
309
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
310 Die Ausgabe auf dem eigenen System (ohne die iconv-Konvertierung)
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
311 wird recht sicher einer dieser beiden Ausgaben entsprechen.
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
312
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
313 Nun zum Test der cut-Implementierung. Hat man ein UTF-8-System,
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
314 dann sollte sich eine POSIX-konforme Implementierung folgendermaßen
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
315 verhalten:
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
316
18
b1e7b45fb3c8 Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 17
diff changeset
317 $ echo ä | cut -c 1 | od -c
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
318 0000000 303 244 \n
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
319 0000003
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
320
18
b1e7b45fb3c8 Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 17
diff changeset
321 $ echo ä | cut -b 1 | od -c
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
322 0000000 303 \n
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
323 0000002
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
324
18
b1e7b45fb3c8 Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 17
diff changeset
325 $ echo ä | cut -b 1 -n | od -c
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
326 0000000 \n
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
327 0000001
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
328
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
329 Bei einer Pseudo-POSIX-Implementierung ist die Ausgabe in
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
330 allen drei Fällen wie die mittlere: Es wird das erste Byte
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
331 ausgegeben.
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
332
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
333
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
334 Implementierungen
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
335
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
336 Nun ein Blick auf den Code. Betrachtet wird eine Auswahl an
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
337 Implementierungen.
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
338
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
339 Für einen ersten Eindruck ist der Umfang des Quellcodes
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
340 hilfreich. Typischerweise steigt dieser über die Jahre an. Diese
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
341 Beobachtung kann hier in der Tendenz, aber nicht in jedem Fall,
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
342 bestätigt werden. Die POSIX-konforme Umsetzung des Zeichenmodus
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
343 erfordert zwangsläufig mehr Code, deshalb sind diese
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
344 Implementierungen tendenziell umfangreicher.
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
345
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
346
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
347 SLOC Zeilen Bytes Gehört zu Dateidatum Kategorie
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
348 -----------------------------------------------------------------
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
349 116 123 2966 System III 1980-04-11 (hist)
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
350 118 125 3038 4.3BSD-UWisc 1986-11-07 (hist)
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
351 200 256 5715 4.3BSD-Reno 1990-06-25 (hist)
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
352 200 270 6545 NetBSD 1993-03-21 (hist)
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
353 218 290 6892 OpenBSD 2008-06-27 (pseudo)
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
354 224 296 6920 FreeBSD 1994-05-27 (hist)
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
355 232 306 7500 NetBSD 2014-02-03 (pseudo)
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
356 340 405 7423 Heirloom 2012-05-20 (POSIX)
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
357 382 586 14175 GNU coreutils 1992-11-08 (pseudo)
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
358 391 479 10961 FreeBSD 2012-11-24 (POSIX)
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
359 588 830 23167 GNU coreutils 2015-05-01 (pseudo)
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
360
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
361
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
362 Das Kandidatenfeld teilt sich grob in vier Gruppen: (1) Die zwei
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
363 ursprünglichen Implementierungen, die sich nur minimal
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
364 unterscheiden, mit gut 100 SLOCs. (2) Die fünf BSD-Versionen mit
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
365 gut 200 SLOCs. (3) Die zwei POSIX-konformen Programme und
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
366 die alte GNU-Version mit 340-390 SLOCs. Und schließlich (4) die
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
367 moderne GNU-Variante mit fast 600 SLOCs.
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
368
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
369 Die Abweichung zwischen logischen Codezeilen (SLOC, ermittelt mit
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
370 SLOCcount) und der Anzahl von Zeilenumbrüchen in der Datei (`wc
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
371 -l') erstreckt sich über eine Spanne von Faktor 1.06 bei den
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
372 ältesten Vertretern bis zu Faktor 1.5 bei GNU. Den größten
19
a62964d0cc54 Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 18
diff changeset
373 Einfluss darauf haben Leerzeilen, reine Kommentarzeilen und
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
374 die Größe des Lizenzblocks am Dateianfang.
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
375
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
376 Betrachtet man die Abweichungen zwischen den logischen Codezeilen
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
377 und der Dateigröße (`wc -c'), so pendelt das Teilnehmerfeld
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
378 zwischen 25 und 30 Bytes je Anweisung. Die Heirloom-Implementierung
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
379 weicht mit nur 21 nach unten ab, die GNU-Implementierungen mit
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
380 fast 40 nach oben. Bei GNU liegt dies hauptsächlich an deren
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
381 Programmierstil, mit spezieller Einrückung und langen Bezeichnern.
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
382 Ob man die Heirloom-Implementierung
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
383 [ XXX
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
384 als besonders kryptisch
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
385 oder als besonders elegant bezeichnen will, das soll der
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
386 eigenen Einschätzung des Lesers überlassen bleiben. Vor allem
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
387 der Vergleich mit einer GNU-Implementierung
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
388 [ XXX
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
389 ist eindrucksvoll.
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
390
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
391
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
392 Die interne Struktur der Programmcodes (in C) ist meist ähnlich.
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
393 Neben der obligatorischen main-Funktion, die die Kommandozeilenargumente
11
04a8a33fc48a Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 10
diff changeset
394 verarbeitet, gibt es im Normalfall eine Funktion, die die
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
395 Feldauswahl in eine interne Datenstruktur überführt. Desweiteren
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
396 haben fast alle Implementierungen separate Funktionen für die
19
a62964d0cc54 Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 18
diff changeset
397 zwei oder drei Modi. Bei den POSIX-konformen Implementierungen
11
04a8a33fc48a Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 10
diff changeset
398 wird die `-b -n'-Kombination als weiterer Modus behandelt, und
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
399 damit in einer eigenen Funktion umgesetzt. Nur bei der frühen
11
04a8a33fc48a Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 10
diff changeset
400 System III-Implementierung (und seiner 4.3BSD-UWisc-Variante)
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
401 wird außer den Fehlerausgaben alles in der main-Funktion
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
402 erledigt.
11
04a8a33fc48a Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 10
diff changeset
403
15
77d1f55bba08 Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents: 13
diff changeset
404 Cut-Implementierungen haben typischerweise zwei limitierende
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
405 Größen: Die Maximalanzahl unterstützter Felder und die maximale
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
406 Zeilenlänge. Bei System III sind beide Größen auf 512 begrenzt.
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
407 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
408 Grenzen (_BSD_LINE_MAX bzw. _POSIX2_LINE_MAX). Bei modernen
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
409 FreeBSDs, NetBSDs, bei allen GNU-Implementierungen und bei
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
410 Heirloom kann sowohl die Felderanzahl als auch die maximale
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
411 Zeilenlänge beliebig groß werden; der Speicher dafür wird
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
412 dynamisch alloziiert. OpenBSD ist ein Hybrid aus fixer
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
413 Maximalzahl an Feldern, aber beliebiger Zeilenlänge. Die
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
414 begrenzte Felderanzahl scheint jedoch kein Praxisproblem
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
415 darzustellen, da _POSIX2_LINE_MAX mit mindestens 2048 durchaus
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
416 groß genug sein sollte.
11
04a8a33fc48a Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 10
diff changeset
417
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
418
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
419 Beschreibungen
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
420
19
a62964d0cc54 Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 18
diff changeset
421 Interessant ist zudem ein Vergleich der Kurzbeschreibungen von
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
422 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
423 am Anfang der Quellcodedatei finden. Die folgende Liste
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
424 ist grob zeitlich geordnet und nach Abstammung gruppiert:
3
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
425
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
426
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
427 System III cut out selected fields of each line of a file
3
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
428 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
429 System V cut out selected fields of each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
430 HP-UX cut out (extract) selected fields of each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
431
3
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
432 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
433 4.3BSD-Reno select portions of each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
434 NetBSD select portions of each line of a file
7
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
435 OpenBSD 4.6 select portions of each line of a file
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
436 FreeBSD 1.0 select portions of each line of a file
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
437 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
438 SunOS 4.1.3 remove selected fields from each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
439 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
440
8
1dc4a9dca829 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 7
diff changeset
441 Heirloom Tools cut out selected fields of each line of a file
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
442 Heirloom Tools (src) cut out fields of lines of files
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
443
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
444 GNU coreutils remove sections from each line of files
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
445
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
446 Minix select out columns of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
447
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
448 Version 8 Unix rearrange columns of data
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
449 ``Unix Reader'' rearrange columns of text
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
450
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
451 POSIX cut out selected fields of each line of a file
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
452
9
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
453
e67bd0d48bd6 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 8
diff changeset
454 Die mit ``(src)'' markierten Beschreibungen sind aus dem
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
455 jeweiligen Quellcode entnommen. Der POSIX-Eintrag enthält
18
b1e7b45fb3c8 Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 17
diff changeset
456 die Beschreibung im Standard. Der ``Unix Reader'' ist ein
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
457 rückblickendes Textdokument von Doug McIlroy, das das
18
b1e7b45fb3c8 Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 17
diff changeset
458 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
459 Thema hat.
16
4d8196c836d8 Referenzen eingefuegt; Todos geprueft
markus schnalke <meillo@marmaro.de>
parents: 15
diff changeset
460 [ 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
461 Eigentlich sollte seine Beschreibung der in Version 8 Unix
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
462 entsprechen. Die Abweichung könnte ein Übertragungsfehler
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
463 oder eine nachträgliche Korrektur sein. Alle übrigen
19
a62964d0cc54 Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 18
diff changeset
464 Beschreibungen entstammen den Manpages.
5
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
465
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
466 Oft ist mit der Zeit die POSIX-Beschreibung übernommen
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
467 oder an sie angeglichen worden, wie beispielsweise bei FreeBSD.
5
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
468 [ https://svnweb.freebsd.org/base?view=revision&revision=167101
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
469
7
21ca59543b07 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 6
diff changeset
470 Interessant ist, dass die GNU coreutils seit Anbeginn vom
5
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
471 Entfernen von Teilen der Eingabe sprechen, wohingegen die
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
472 Kommandozeilenangabe klar ein Auswählen darstellt. Die
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
473 Worte ``cut out'' sind vielleicht auch zu missverständlich.
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
474 HP-UX hat sie deshalb präzisiert.
5
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
475
19
a62964d0cc54 Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents: 18
diff changeset
476 Beim Begriff, was selektiert wird, ist man sich ebenfalls
17
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
477 uneins. Die Einen reden von Feldern (POSIX), Andere von
08f539a5445d Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents: 16
diff changeset
478 Abschnitten bzw. Teilen (BSD) und wieder Andere von Spalten
5
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
479 (Research Unix). Ironischerweise leistet sich gerade Version
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
480 8 Unix, das eigentlich um eine sehr treffende Weltsicht
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
481 bemüht ist, mit ``rearrange columns of data'' die
5
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
482 unzutreffendste der Beschreibungen.
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
483
00097c80a853 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 4
diff changeset
484
6
bf2ac5df0063 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 5
diff changeset
485 Autoreninfo
bf2ac5df0063 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 5
diff changeset
486
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
487 Markus Schnalke interessiert sich für die Hintergründe
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
488 von Unix und seinen Werkzeugen. Für die Erarbeitung dieses
6
bf2ac5df0063 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 5
diff changeset
489 Textes wurde er regelrecht zum Historiker.
bf2ac5df0063 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 5
diff changeset
490
bf2ac5df0063 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 5
diff changeset
491
bf2ac5df0063 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 5
diff changeset
492 Lizenz
10
7e1214b556b9 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 9
diff changeset
493
6
bf2ac5df0063 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 5
diff changeset
494 CC0 (und kann damit auch unter CC BY-SA 4.0 Unported
21
bac481be86d7 Umlaute konvertiert
markus schnalke <meillo@marmaro.de>
parents: 20
diff changeset
495 veröffentlicht werden)