annotate cut.txt @ 37:c338b706447b

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