Mercurial > docs > cut
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 |
rev | line source |
---|---|
6 | 1 cut - cut out selected fields of each line of a file |
2 ---------------------------------------------------- | |
3 markus schnalke <meillo@marmaro.de> | |
4 2015-05 | |
0 | 5 |
6 | |
1 | 7 Cut ist ein klassisches Programm im Unix-Werkzeugkasten. |
8 | 8 In keinem ordentlichen Tutorial zur Shellprogrammierung fehlt |
21 | 9 es, denn es ist ein schönes, praktisches und anschauliches |
9 | 10 Helferlein. Hier soll ein wenig hinter seine Fassade geschaut |
11 werden. | |
0 | 12 |
13 | |
4 | 14 Funktionsweise |
15 | |
21 | 16 Ursprünglich hatte cut zwei Modi, die später um einen dritten |
17 erweitert wurden. Cut schneidet entweder gewünschte Zeichen aus | |
18 den Zeilen der Eingabe oder gewünschte, durch Trennzeichen | |
8 | 19 definierte, Felder. |
0 | 20 |
9 | 21 Der Zeichenmodus ist optimal geeignet um Festbreitenformate zu |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
22 zerteilen. Man kann damit beispielsweise bestimmte |
9 | 23 Zugriffsrechte aus der Ausgabe von `ls -l' ausschneiden, in |
24 diesem Beispiel die Rechte des Besitzers: | |
0 | 25 |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
26 $ ls -l foo |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
27 -rw-rw-r-- 1 meillo users 0 May 12 07:32 foo |
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
28 |
4 | 29 $ ls -l foo | cut -c 2-4 |
30 rw- | |
0 | 31 |
4 | 32 Oder die Schreibrechte des Besitzers, der Gruppe und der |
33 Welt: | |
0 | 34 |
4 | 35 $ ls -l | cut -c 3,6,9 |
36 ww- | |
0 | 37 |
21 | 38 Mit cut lassen sich aber auch Strings kürzen. |
0 | 39 |
10 | 40 $ long=12345678901234567890 |
41 $ echo "$long" | cut -c -10 | |
42 1234567890 | |
0 | 43 |
10 | 44 Dieser Befehl gibt die ersten maximal 10 Zeichen von |
21 | 45 `$long' aus. (Alternativ kann man hierfür `printf |
10 | 46 "%.10s\n" "$long"' verwenden.) |
0 | 47 |
4 | 48 Geht es aber nicht um die Darstellung von Zeichen, sondern um |
8 | 49 ihre Speicherung, dann ist `-c' nicht unbedingt geeignet. |
21 | 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 | 52 Byte gespeichert. Somit selektierte `cut -c' gleichermaßen |
4 | 53 sowohl Ausgabezeichen als auch Bytes. Mit dem Aufkommen von |
54 Multibyte-Kodierungen (wie UTF-8) musste man sich jedoch von | |
21 | 55 dieser Annahme lösen. In diesem Zug bekam cut mit |
9 | 56 POSIX.2-1992 einen Bytemodus (Option `-b'). Will man |
4 | 57 also nur die ersten maximal 500 Bytes vor dem |
0 | 58 Newline-Zeichen stehen haben (und den Rest stillschweigend |
59 ignorieren), dann macht man das mit: | |
60 | |
6 | 61 $ cut -b -500 |
0 | 62 |
4 | 63 Den Rest kann man sich mit `cut -b 501-' einfangen. Diese |
21 | 64 Funktion ist insbesondere für POSIX wichtig, da man damit |
65 Textdateien mit begrenzter Zeilenlänge erzeugen kann. | |
4 | 66 [ http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html#tag_20_28_17 |
0 | 67 |
21 | 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 | 73 den Zeichenmodus neu zu implementieren. |
74 | |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
75 Neben dem Zeichen- und Bytemodus bietet cut noch den |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
76 Feldmodus, den man mit `-f' einleitet. Mit ihm |
21 | 77 können Felder ausgewählt werden. Das Trennzeichen (per |
78 Default der Tab) kann mit `-d' geändert werden. Es gilt in | |
79 gleicher Weise für die Eingabe und die Ausgabe. | |
0 | 80 |
21 | 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 | 84 |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
85 $ cut -d: -f1,3 /etc/passwd |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
86 root:0 |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
87 bin:1 |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
88 daemon:2 |
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
89 mail:8 |
9 | 90 ... |
0 | 91 |
21 | 92 (Die Argumente für die Optionen können bei cut übrigens |
93 mit Whitespace abgetrennt oder direkt angehängt folgen.) | |
0 | 94 |
21 | 95 Dieser Feldmodus ist für einfache tabellarische Dateien, |
4 | 96 wie eben die passwd, gut geeignet. Er kommt aber schnell an |
21 | 97 seine Grenzen. Gerade der häufige Fall, dass an Whitespace |
0 | 98 in Felder geteilt werden soll, wird damit nicht abgedeckt. |
17
08f539a5445d
Ueberarbeitung der Formulierungen, hauptsaechlich
markus schnalke <meillo@marmaro.de>
parents:
16
diff
changeset
|
99 Der Delimiter kann bei cut nur genau ein Zeichen sein. Es kann |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
100 demnach nicht sowohl an Leerzeichen als auch an Tabs aufgetrennt |
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
101 werden. Zudem unterteilt cut an jedem Trennzeichen. Zwei aneinander |
21 | 102 stehende Trennzeichen führen zu einem leeren Feld. Dieses |
8 | 103 Verhalten widerspricht den Erwartungen, die man an die |
104 Verarbeitung einer Datei mit Whitespace-getrennten Feldern | |
105 hat. Manche Implementierungen von cut, z.B. die von FreeBSD, | |
21 | 106 haben deshalb Erweiterungen, die das gewünschte Verhalten |
107 für Whitespace-getrennte Felder bieten. Ansonsten, d.h. wenn | |
9 | 108 man portabel bleiben will, verwendet man awk in diesen |
21 | 109 Fällen. |
0 | 110 |
4 | 111 Awk bietet noch eine weitere Funktion, die cut missen |
21 | 112 lässt: Das Tauschen der Feld-Reihenfolge in der Ausgabe. Bei |
8 | 113 cut ist die Reihenfolge der Feldauswahlangabe irrelevant; ein |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
114 Feld kann selbst mehrfach angegeben werden. Dementsprechend gibt |
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
115 der Aufruf |
8 | 116 von `cut -c 5-8,1,4-6' die Zeichen Nummer 1, 4, 5, 6, 7 und 8 |
117 in genau dieser Reihenfolge aus. Die Auswahl entspricht damit | |
118 der Mengenlehre in der Mathematik: Jedes angegebene Feld wird | |
9 | 119 Teil der Ergebnismenge. Die Felder der Ergebnismenge sind |
19
a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
18
diff
changeset
|
120 hierbei immer gleich geordnet wie in der Eingabe. Um die Worte |
16
4d8196c836d8
Referenzen eingefuegt; Todos geprueft
markus schnalke <meillo@marmaro.de>
parents:
15
diff
changeset
|
121 der Manpage von Version 8 Unix wiederzugeben: ``In data base |
9 | 122 parlance, it projects a relation.'' |
16
4d8196c836d8
Referenzen eingefuegt; Todos geprueft
markus schnalke <meillo@marmaro.de>
parents:
15
diff
changeset
|
123 [ http://man.cat-v.org/unix_8th/1/cut |
21 | 124 Cut führt demnach die Datenbankoperation Projektion auf |
125 Textdateien aus. Die Wikipedia erklärt das folgendermaßen: | |
7 | 126 |
127 Die Projektion entspricht der Projektionsabbildung aus der | |
128 Mengenlehre und kann auch Attributbeschränkung genannt | |
129 werden. Sie extrahiert einzelne Attribute aus der | |
130 ursprünglichen Attributmenge und ist somit als eine Art | |
131 Selektion auf Spaltenebene zu verstehen, das heißt, die | |
132 Projektion blendet Spalten aus. | |
133 | |
8 | 134 [ http://de.wikipedia.org/wiki/Projektion_(Informatik)#Projektion |
135 | |
7 | 136 |
0 | 137 Geschichtliches |
138 | |
4 | 139 Cut erblickte 1982 mit dem Release von UNIX System III das |
21 | 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 | 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 | 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 | 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 | 163 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-UWisc/src/usr.bin/cut |
164 als Teil der Spezialversion 4.3BSD-UWisc, | |
6 | 165 [ http://gunkies.org/wiki/4.3_BSD_NFS_Wisconsin_Unix |
21 | 166 die im Januar 1987 veröffentlicht wurde. |
8 | 167 Die Implementierung unterscheidet sich nur minimal von der |
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 | 172 Marciano Pitargue neu implementiertes cut, das 1989 in BSD |
173 aufgenommen wurde. | |
1 | 174 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut |
4 | 175 Seine Manpage |
1 | 176 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut/cut.1 |
21 | 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 | 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 | 181 wurde folglich anhand von Arbeitsversionen des Standards |
21 | 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 | 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 | 189 |
21 | 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 | 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 | 196 Zudem listet Draft 11.2 alle drei Modi, während in diesem |
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 | 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 | 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 | 206 |
21 | 207 Das cut der GNU Coreutils enthält folgenden Copyrightvermerk: |
12 | 208 |
209 Copyright (C) 1997-2015 Free Software Foundation, Inc. | |
210 Copyright (C) 1984 David M. Ihnat | |
211 | |
21 | 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 | 214 MacKenzie und später von Jim Meyering überarbeitet. Letzterer |
12 | 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 | 218 |
21 | 219 Trotz der vielen Jahreszahlen aus den 80er Jahren gehört cut, |
220 aus Sicht des ursprünglichen Unix, zu den jüngeren Tools. | |
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 | 223 erste Mal auftauchte. Insbesondere gehörte cut noch nicht |
4 | 224 zu Version 7 Unix, das die Ausgangsbasis aller modernen |
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 | 227 fragen, warum cut überhaupt noch entwickelt wurde, wo es |
9 | 228 schon zwei Programme gab, die die Funktion von cut abdecken |
21 | 229 konnten. Ein Argument für cut war sicher seine Kompaktheit und |
230 die damit verbundene Geschwindigkeit gegenüber dem damals | |
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 | 233 Cut überzeugte. Es wurde in andere Unix Varianten übernommen, |
234 standardisiert und ist heutzutage überall anzutreffen. | |
1 | 235 |
21 | 236 Die ursprüngliche Variante (ohne -b) wurde schon 1985 in |
5 | 237 der System V Interface Definition, einer wichtigen formalen |
9 | 238 Beschreibung von UNIX System V, spezifiziert und tauchte |
21 | 239 anschließend in allen relevanten Standards auf. Mit POSIX.2 |
9 | 240 im Jahre 1992 wurde cut zum ersten Mal in der heutigen Form |
241 (mit -b) standardisiert. | |
2 | 242 |
243 | |
21 | 244 Multibyte-Unterstützung |
8 | 245 |
246 Nun sind der Bytemodus und die damit verbundene | |
247 Multibyte-Verarbeitung des POSIX-Zeichenmodus bereits seit | |
248 1992 standardisiert, wie steht es aber mit deren Umsetzung? | |
10 | 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 | 251 Implementierungen, die nur -c und -f kennen. Dann gibt es |
10 | 252 Implementierungen die -b zwar kennen, es aber lediglich als Alias |
21 | 253 für -c handhaben. Diese Implementierungen funktionieren mit |
8 | 254 Single-Byte-Encodings (z.B. US-ASCII, Latin1) korrekt, bei |
21 | 255 Multibyte-Encodings (z.B. UTF-8) verhält sich ihr -c aber |
256 wie -b (und -n wird ignoriert). Schließlich gibt es noch | |
257 Implementierungen, die -b und -c tatsächlich POSIX-konform | |
8 | 258 implementieren. |
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 | 261 System III, System V und die aller BSDs bis in die 90er. |
262 | |
10 | 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 | 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 | 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 | 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 | 276 |
21 | 277 Tatsächlich standardkonforme Implementierungen, die |
8 | 278 Multibytes korrekt handhaben, bekommt man bei einem modernen |
279 FreeBSD und bei den Heirloom Tools. Bei FreeBSD hat Tim Robbins | |
9 | 280 im Sommer 2004 den Zeichenmodus POSIX-konform reimplementiert. |
8 | 281 [ https://svnweb.freebsd.org/base?view=revision&revision=131194 |
21 | 282 Warum die beiden anderen großen BSDs diese Änderung nicht |
283 übernommen haben, bleibt offen. Es scheint aber an der im | |
8 | 284 obigen Kommentar formulierten Grundausrichtung zu liegen. |
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 | 287 Systems Multibytes korrekt unterstützt werden? Zuerst ist |
8 | 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 | 290 Zeichen und Bytes und die Frage erübrigt sich. Man kann das |
9 | 291 herausfinden indem man sich das Locale anschaut, aber einfacher |
292 ist es, ein typisches Mehrbytezeichen, wie z.B. einen Umlaut, | |
293 auszugeben und zu schauen ob dieses in einem oder in mehreren | |
294 Bytes kodiert ist: | |
8 | 295 |
296 $ echo ä | od -c | |
297 0000000 303 244 \n | |
298 0000003 | |
299 | |
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 | 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 | 304 Kodierungen konvertieren. Hier Beispiele, wie die Ausgabe |
305 bei Latin1 und wie sie bei UTF-8 aussieht. | |
8 | 306 |
307 $ echo ä | iconv -t latin1 | od -c | |
308 0000000 344 \n | |
309 0000002 | |
310 | |
311 $ echo ä | iconv -t utf8 | od -c | |
312 0000000 303 244 \n | |
313 0000003 | |
314 | |
315 Die Ausgabe auf dem eigenen System (ohne die iconv-Konvertierung) | |
316 wird recht sicher einer dieser beiden Ausgaben entsprechen. | |
317 | |
318 Nun zum Test der cut-Implementierung. Hat man ein UTF-8-System, | |
21 | 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 | 321 |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
322 $ echo ä | cut -c 1 | od -c |
10 | 323 0000000 303 244 \n |
8 | 324 0000003 |
325 | |
18
b1e7b45fb3c8
Anmerkungen von Michi eingearbeitet
markus schnalke <meillo@marmaro.de>
parents:
17
diff
changeset
|
326 $ echo ä | cut -b 1 | od -c |
10 | 327 0000000 303 \n |
8 | 328 0000002 |
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 | 331 0000000 \n |
332 0000001 | |
333 | |
334 Bei einer Pseudo-POSIX-Implementierung ist die Ausgabe in | |
21 | 335 allen drei Fällen wie die mittlere: Es wird das erste Byte |
10 | 336 ausgegeben. |
8 | 337 |
338 | |
339 Implementierungen | |
340 | |
9 | 341 Nun ein Blick auf den Code. Betrachtet wird eine Auswahl an |
342 Implementierungen. | |
343 | |
21 | 344 Für einen ersten Eindruck ist der Umfang des Quellcodes |
345 hilfreich. Typischerweise steigt dieser über die Jahre an. Diese | |
8 | 346 Beobachtung kann hier in der Tendenz, aber nicht in jedem Fall, |
21 | 347 bestätigt werden. Die POSIX-konforme Umsetzung des Zeichenmodus |
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 | 350 |
351 | |
21 | 352 SLOC Zeilen Bytes Gehört zu Dateidatum Kategorie |
9 | 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 | 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 | 360 232 306 7500 NetBSD 2014-02-03 (pseudo) |
361 340 405 7423 Heirloom 2012-05-20 (POSIX) | |
362 382 586 14175 GNU coreutils 1992-11-08 (pseudo) | |
363 391 479 10961 FreeBSD 2012-11-24 (POSIX) | |
364 588 830 23167 GNU coreutils 2015-05-01 (pseudo) | |
8 | 365 |
366 | |
9 | 367 Das Kandidatenfeld teilt sich grob in vier Gruppen: (1) Die zwei |
21 | 368 ursprünglichen Implementierungen, die sich nur minimal |
369 unterscheiden, mit gut 100 SLOCs. (2) Die fünf BSD-Versionen mit | |
9 | 370 gut 200 SLOCs. (3) Die zwei POSIX-konformen Programme und |
21 | 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 | 373 |
374 Die Abweichung zwischen logischen Codezeilen (SLOC, ermittelt mit | |
21 | 375 SLOCcount) und der Anzahl von Zeilenumbrüchen in der Datei (`wc |
376 -l') erstreckt sich über eine Spanne von Faktor 1.06 bei den | |
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 | 379 die Größe des Lizenzblocks am Dateianfang. |
9 | 380 |
381 Betrachtet man die Abweichungen zwischen den logischen Codezeilen | |
21 | 382 und der Dateigröße (`wc -c'), so pendelt das Teilnehmerfeld |
9 | 383 zwischen 25 und 30 Bytes je Anweisung. Die Heirloom-Implementierung |
384 weicht mit nur 21 nach unten ab, die GNU-Implementierungen mit | |
21 | 385 fast 40 nach oben. Bei GNU liegt dies hauptsächlich an deren |
386 Programmierstil, mit spezieller Einrückung und langen Bezeichnern. | |
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 | 389 als besonders kryptisch |
9 | 390 oder als besonders elegant bezeichnen will, das soll der |
21 | 391 eigenen Einschätzung des Lesers überlassen bleiben. Vor allem |
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 | 394 ist eindrucksvoll. |
8 | 395 |
396 | |
21 | 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 | 399 verarbeitet, gibt es im Normalfall eine Funktion, die die |
21 | 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 | 403 wird die `-b -n'-Kombination als weiterer Modus behandelt, und |
21 | 404 damit in einer eigenen Funktion umgesetzt. Nur bei der frühen |
11 | 405 System III-Implementierung (und seiner 4.3BSD-UWisc-Variante) |
21 | 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 | 408 |
15
77d1f55bba08
Weitere Ueberarbeitungen
markus schnalke <meillo@marmaro.de>
parents:
13
diff
changeset
|
409 Cut-Implementierungen haben typischerweise zwei limitierende |
21 | 410 Größen: Die Maximalanzahl unterstützter Felder und die maximale |
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 | 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 | 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 | 421 groß genug sein sollte. |
11 | 422 |
8 | 423 |
2 | 424 Beschreibungen |
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 | 429 ist grob zeitlich geordnet und nach Abstammung gruppiert: |
3 | 430 |
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 | 433 System III cut out selected fields of each line of a file |
3 | 434 System III (src) cut and paste columns of a table (projection of a relation) |
2 | 435 System V cut out selected fields of each line of a file |
436 HP-UX cut out (extract) selected fields of each line of a file | |
437 | |
3 | 438 4.3BSD-UWisc (src) cut and paste columns of a table (projection of a relation) |
2 | 439 4.3BSD-Reno select portions of each line of a file |
440 NetBSD select portions of each line of a file | |
7 | 441 OpenBSD 4.6 select portions of each line of a file |
2 | 442 FreeBSD 1.0 select portions of each line of a file |
10 | 443 FreeBSD 10.0 cut out selected portions of each line of a file |
2 | 444 SunOS 4.1.3 remove selected fields from each line of a file |
445 SunOS 5.5.1 cut out selected fields of each line of a file | |
446 | |
8 | 447 Heirloom Tools cut out selected fields of each line of a file |
9 | 448 Heirloom Tools (src) cut out fields of lines of files |
2 | 449 |
450 GNU coreutils remove sections from each line of files | |
451 | |
452 Minix select out columns of a file | |
453 | |
454 Version 8 Unix rearrange columns of data | |
455 ``Unix Reader'' rearrange columns of text | |
1 | 456 |
9 | 457 POSIX cut out selected fields of each line of a file |
1 | 458 |
9 | 459 |
460 Die mit ``(src)'' markierten Beschreibungen sind aus dem | |
21 | 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 | 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 | 468 entsprechen. Die Abweichung könnte ein Übertragungsfehler |
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 | 471 |
21 | 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 | 474 [ https://svnweb.freebsd.org/base?view=revision&revision=167101 |
475 | |
7 | 476 Interessant ist, dass die GNU coreutils seit Anbeginn vom |
5 | 477 Entfernen von Teilen der Eingabe sprechen, wohingegen die |
21 | 478 Kommandozeilenangabe klar ein Auswählen darstellt. Die |
479 Worte ``cut out'' sind vielleicht auch zu missverständlich. | |
480 HP-UX hat sie deshalb präzisiert. | |
5 | 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 | 490 |
491 | |
6 | 492 Autoreninfo |
493 | |
21 | 494 Markus Schnalke interessiert sich für die Hintergründe |
495 von Unix und seinen Werkzeugen. Für die Erarbeitung dieses | |
6 | 496 Textes wurde er regelrecht zum Historiker. |
497 | |
498 | |
499 Lizenz | |
10 | 500 |
6 | 501 CC0 (und kann damit auch unter CC BY-SA 4.0 Unported |
21 | 502 veröffentlicht werden) |