annotate cut.txt @ 4:d0b61c2bd25c

Zwischenstand
author markus schnalke <meillo@marmaro.de>
date Sat, 02 May 2015 22:49:00 +0200
parents 7cd149433a96
children 00097c80a853
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
1 Das Werkzeugkaestle
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
2
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
3 #1: cut - cut out selected fields of each line of a file
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
4 ---------------------------------------------------------
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
5 markus schnalke, 2015-05
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
6
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
7
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
8 Cut ist ein klassisches Programm im Unix-Werkzeugkasten.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
9 In keinem ordentlichen Tutorial zur Shellprogrammierung darf
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
10 es fehlen. Es ist ein schoenes Anschauungs- und Beispielobjekt
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
11 fuer's Shellscripting. Hier will ich ein wenig hinter die
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
12 Fassade schauen.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
13
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
14
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
15 Funktionsweise
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
16
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
17 Die Funktionsbasis von cut waren urspruenglich zwei Modi, die
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
18 spaeter um einen dritten erweitert wurden. Cut schneidet
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
19 entweder bestimmte Zeichen aus den Zeilen der Eingabe oder
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
20 bestimmte durch Trennzeichen definierte Felder.
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
21
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
22 Der Zeichenmodus ist geeignet um Ausschnitte aus
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
23 Festbreitenformaten zu extrahieren. So kann man damit
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
24 beispielsweise bestimmte Zugriffsrechte aus der Ausgabe von
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
25 `ls -l' ausschneiden. Hier die Rechte des Besitzers:
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
26
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
27 $ ls -l foo | cut -c 2-4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
28 rw-
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
29
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
30 Oder die Schreibrechte des Besitzers, der Gruppe und der
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
31 Welt:
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
32
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
33 $ ls -l | cut -c 3,6,9
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
34 ww-
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
35
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
36 Mit cut lassen sich aber auch Strings kuerzen.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
37
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
38 echo "$long" | cut -c -20
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
39
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
40 Dieser Befehl gibt die ersten maximal 20 Zeichen (jeder
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
41 Zeile) von `$long' aus.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
42
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
43 Geht es aber nicht um die Darstellung von Zeichen, sondern um
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
44 ihre Speicherung, dann ist `-c' nicht unbedingt die passende
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
45 Option. Frueher, als US-ASCII als Zeichensatz und -kodierung
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
46 noch omnipraesent war, wurde jedes Zeichen mit genau einem
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
47 Byte gespeichert. Somit selektierte `cut -c' gleichermassen
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
48 sowohl Ausgabezeichen als auch Bytes. Mit dem Aufkommen von
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
49 Multibyte-Kodierungen (wie UTF-8) musste man sich jedoch von
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
50 dieser Annahme loesen. In diesem Zug bekam cut mit
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
51 POSIX.2-1992 die Option `-b'. Diese selektiert Bytes. Will man
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
52 also nur die ersten maximal 500 Bytes vor dem
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
53 Newline-Zeichen stehen haben (und den Rest stillschweigend
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
54 ignorieren), dann macht man das mit:
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
55
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
56 cut -b -500
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
57
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
58 Den Rest kann man sich mit `cut -b 501-' einfangen. Diese
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
59 Funktion ist insbesondere fuer POSIX wichtig, da so sicher
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
60 gestellt werden kann, dass Textdateien keine beliebig
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
61 langen Zeilen haben.
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
62 [ http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html#tag_20_28_17
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
63
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
64 Neben dem Zeichen- bzw. Byte-Modus bietet cut noch den
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
65 interessanteren Feld-Modus, den man mit `-f' einleitet. Mit ihm
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
66 koennen Felder ausgewaehlt werden. Das Trennzeichen (per
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
67 Default der Tab) kann mit `-d' geaendert werden.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
68
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
69 Der typische Anwendungsfall fuer den Feld-Modus. Ist die
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
70 Extraktion von Information aus der passwd-Datei. So z.B. der
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
71 Username, die User-ID und das Homeverzeichnis:
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
72
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
73 cut -d: -f1,3,6 /etc/passwd
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
74
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
75 (Die Argumente fuer die Optionen koennen bei cut uebrigens
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
76 direkt angehaengt oder mit Whitespace abgetrennt folgen.)
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
77
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
78
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
79 Dieser Feld-Modus ist fuer einfache tabellarische Dateien,
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
80 wie eben die passwd, gut geeignet. Er kommt aber schnell an
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
81 seine Grenzen. Gerade der uebliche Fall, dass an Whitespace
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
82 in Felder geteilt werden soll, wird damit nicht abgedeckt.
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
83 Der Delimiter kann nur genau ein Zeichen sein. Es kann also
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
84 nicht sowohl an Leerzeichen als auch an Tabs getrennt werden.
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
85 Auch unterteilt cut an jedem Trennzeichen. Zwei aneinander
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
86 stehende Trennzeichen fuehren zu einem leeren Feld. Dieses
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
87 Verhalten widerspricht den Erwartungen fuer eine Datei mit
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
88 Whitespace-getrennten Feldern. (Manche Implementierungen von
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
89 cut, z.B. die von FreeBSD, haben deshalb Erweiterungen, die
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
90 das gewuenschte Verhalten fuer Whitespace-getrennte Felder
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
91 bieten.) Ansonsten, d.h. wenn man portabel bleiben will,
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
92 hilft awk.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
93
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
94 Awk bietet noch eine weitere Funktion, die cut missen
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
95 laesst: Das Tauschen der Felder-Reihenfolge. Bei cut ist die
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
96 Reihenfolge der Feldauswahl irrelevant; ein Feld kann selbst
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
97 mehrfach angegeben werden. Der Aufruf von `cut -c 5-8,1,4-6'
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
98 gibt z.B. die Zeichen Nummer 1, 4, 5, 6, 7 und 8 aus. Die
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
99 Auswahl aehnelt damit der Mengenlehre in der Mathematik:
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
100 Jedes angegebene Feld soll in der Ergebnismenge sein. Die
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
101 Felder der Ergebnismenge werden dabei immer in der gleichen
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
102 Reihenfolge ausgegeben wie sie in der Eingabe waren.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
103
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
104
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
105 Geschichtliches
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
106
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
107 Cut erblickte 1982 mit dem Release von UNIX System III das
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
108 Licht der oeffentlichen Welt. Wenn man die Quellen von System
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
109 III durchforstet, findet man die Quellcodedatei cut.c mit dem
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
110 Zeitstempel 1980-04-11.
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
111 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=SysIII/usr/src/cmd
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
112 Das ist die aelteste Manifestation des Programms, die ich
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
113 aufstoebern konnte.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
114
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
115 Aber werfen wir doch einen Blick auf die BSD-Linie: Dort ist mein
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
116 fruehester Fund ein cut.c mit dem Datum 1986-11-07 im Code der
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
117 Spezialversion 4.3BSD-UWisc, die im Januar 1987 veroeffentlicht
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
118 wurde.
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
119 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-UWisc/src/usr.bin/cut
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
120 Die Datei unterscheidet sich nur minimal von der aus System III.
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
121 Im bekannteren 4.3BSD-Tahoe (1988) taucht cut aber nicht auf.
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
122 Im darauf folgenden 4.3BSD-Reno (1990) gibt es wiederum ein
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
123 cut ... ein von Adam S. Moskowitz und Marciano Pitargue neu
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
124 implementiertes cut, das 1989 in BSD aufgenommen wurde.
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
125 [ 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
126 Seine Manpage
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
127 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut/cut.1
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
128 erwaehnt bereits die erwartete Konformitaet mit POSIX.2.
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
129 Nun sollte man wissen, dass POSIX.2 erst im September
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
130 1992 veroeffentlicht wurde, gut zwei Jahren *nachdem* die
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
131 Manpage und das Programm geschrieben wurden. Dieses cut
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
132 wurde also anhand von Entwuerfen des Standards
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
133 implementiert. Zweieinhalb Jahre Arbeit war immerhin schon in
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
134 den Standardisierungsprozess geflossen; bis zur
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
135 Fertigstellung sollte es noch weitere zwei Jahre dauern.
0
5efb052a0d9e Zwischenstand
markus schnalke <meillo@marmaro.de>
parents:
diff changeset
136
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
137 Trotz all dieser Jahreszahlen aus den 80er Jahren gehoert cut
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
138 aus Sicht des urspruenglichen Unix zu den juengeren Tools.
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
139 Wenn cut auch ein Jahrzehnt aelter als Linux, der Kernel, ist,
4
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
140 so war Unix doch schon ueber zehn Jahre alt, als cut das
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
141 erste Mal auftauchte. Insbesondere gehoerte cut noch nicht
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
142 zu Version 7 Unix, das die Ausgangsbasis aller modernen
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
143 Unix-Systeme darstellt. Die weit komplexeren Programme sed
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
144 und awk waren dort schon vertreten. Man muss sich also
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
145 fragen, warum cut ueberhaupt noch entwickelt wurde, wo es
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
146 schon zwei Programme gab, die die Aufgabe von cut bereits
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
147 abdeckten. Ein Argument fuer cut ist seine Kompaktheit und
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
148 die damit verbundene Geschwindigkeit gegenueber dem damals
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
149 traegen awk. Diese schlanke Gestalt ist es auch, die der Unix
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
150 Philosopie entspricht: Mache eine Aufgabe und die richtig!
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
151 So bewaehrte sich cut. Es wurde in andere Unix Varianten
d0b61c2bd25c Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 3
diff changeset
152 uebernommen, standardisiert und ist heutzutage ueberall
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
153 anzutreffen.
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
154
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
155 Mit POSIX.2 im Jahre 1992 wurde cut zum ersten Mal in der
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
156 heutigen Form (mit -b) standardisiert. In der urspruenglichen
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
157 Variante (ohne -b) taucht es u.a. 1985 in der System V
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
158 Interface Definition, einer wichtigen formalen Beschreibung
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
159 von UNIX System V, auf.
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
160
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
161
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
162 Beschreibungen
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
163
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
164 Interessant ist ein Vergleich der Kurzbeschreibungen von cut,
3
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
165 wie sie sich in der Titelzeile von Manpages oder manchmal auch
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
166 am Anfang der Quellcodedatei findet.
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
167
3
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
168 Die folgende Liste ist grob nach Zeit georndet und nach
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
169 Abstammung gruppiert. Die mit ``(src)'' markierten
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
170 Beschreibungen wurden im Code gefunden. POSIX und der ``Unix
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
171 Reader'' sind Textdokumente, die nicht an eine bestimmte
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
172 Unix-Version gebunden sind. Alle uebrigen Beschreibungen
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
173 entstammen der jeweiligen Manpage.
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
174
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
175
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
176 System III cut out selected fields of each line of a file
3
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
177 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
178 System V cut out selected fields of each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
179 HP-UX cut out (extract) selected fields of each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
180
3
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
181 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
182 4.3BSD-Reno select portions of each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
183 NetBSD select portions of each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
184 FreeBSD 1.0 select portions of each line of a file
3
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
185 FreeBSD 7.0 cut out selected portions of each line of a file
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
186 SunOS 4.1.3 remove selected fields from each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
187 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
188
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
189 POSIX cut out selected fields of each line of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
190
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
191 GNU coreutils remove sections from each line of files
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
192
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
193 Minix select out columns of a file
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
194
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
195 Version 8 Unix rearrange columns of data
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
196 ``Unix Reader'' rearrange columns of text
1
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
197
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
198
a3f18ccc3996 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 0
diff changeset
199
3
7cd149433a96 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 2
diff changeset
200 Codevergleich
2
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
201
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
202
3659d2502d61 Zwischenstand
markus schnalke <meillo@marmaro.de>
parents: 1
diff changeset
203