docs/cut
diff cut.txt @ 9:e67bd0d48bd6
Zwischenstand
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Tue, 05 May 2015 19:21:00 +0200 |
parents | 1dc4a9dca829 |
children | 7e1214b556b9 |
line diff
1.1 --- a/cut.txt Tue May 05 09:04:00 2015 +0200 1.2 +++ b/cut.txt Tue May 05 19:21:00 2015 +0200 1.3 @@ -8,21 +8,22 @@ 1.4 1.5 Cut ist ein klassisches Programm im Unix-Werkzeugkasten. 1.6 In keinem ordentlichen Tutorial zur Shellprogrammierung fehlt 1.7 -es. Es ist ein schoenes Anschauungsobjekt fuer's Shellscripting. 1.8 -Hier soll ein wenig hinter die Fassade von cut geschaut werden. 1.9 +es, denn es ist ein schoenes, praktisches und anschauliches 1.10 +Helferlein. Hier soll ein wenig hinter seine Fassade geschaut 1.11 +werden. 1.12 1.13 1.14 Funktionsweise 1.15 1.16 Urspruenglich hatte cut zwei Modi, die spaeter um einen dritten 1.17 -erweitert wurden. Cut schneidet entweder bestimmte Zeichen aus 1.18 -den Zeilen der Eingabe oder bestimmte, durch Trennzeichen 1.19 +erweitert wurden. Cut schneidet entweder gewuenschte Zeichen aus 1.20 +den Zeilen der Eingabe oder gewuenschte, durch Trennzeichen 1.21 definierte, Felder. 1.22 1.23 -Der Zeichenmodus ist geeignet um Festbreitenformaten zu 1.24 +Der Zeichenmodus ist optimal geeignet um Festbreitenformate zu 1.25 zerteilen. So kann man damit beispielsweise bestimmte 1.26 -Zugriffsrechte aus der Ausgabe von `ls -l' ausschneiden. Hier 1.27 -die Rechte des Besitzers: 1.28 +Zugriffsrechte aus der Ausgabe von `ls -l' ausschneiden, in 1.29 +diesem Beispiel die Rechte des Besitzers: 1.30 1.31 $ ls -l foo | cut -c 2-4 1.32 rw- 1.33 @@ -49,7 +50,7 @@ 1.34 sowohl Ausgabezeichen als auch Bytes. Mit dem Aufkommen von 1.35 Multibyte-Kodierungen (wie UTF-8) musste man sich jedoch von 1.36 dieser Annahme loesen. In diesem Zug bekam cut mit 1.37 -POSIX.2-1992 einen Bytemodus mit der Option `-b'. Will man 1.38 +POSIX.2-1992 einen Bytemodus (Option `-b'). Will man 1.39 also nur die ersten maximal 500 Bytes vor dem 1.40 Newline-Zeichen stehen haben (und den Rest stillschweigend 1.41 ignorieren), dann macht man das mit: 1.42 @@ -71,14 +72,18 @@ 1.43 Benutername, seine ID und das Homeverzeichnis: 1.44 1.45 $ cut -d: -f1,3,6 /etc/passwd 1.46 + root:0:/root 1.47 + bin:1:/bin 1.48 + daemon:2:/sbin 1.49 + mail:8:/var/spool/mail 1.50 + ... 1.51 1.52 (Die Argumente fuer die Optionen koennen bei cut uebrigens 1.53 mit Whitespace abgetrennt oder direkt angehaengt folgen.) 1.54 1.55 - 1.56 Dieser Feld-Modus ist fuer einfache tabellarische Dateien, 1.57 wie eben die passwd, gut geeignet. Er kommt aber schnell an 1.58 -seine Grenzen. Gerade der uebliche Fall, dass an Whitespace 1.59 +seine Grenzen. Gerade der haeufige Fall, dass an Whitespace 1.60 in Felder geteilt werden soll, wird damit nicht abgedeckt. 1.61 Der Delimiter kann nur genau ein Zeichen sein. Es kann also 1.62 nicht sowohl an Leerzeichen als auch an Tabs getrennt werden. 1.63 @@ -87,9 +92,10 @@ 1.64 Verhalten widerspricht den Erwartungen, die man an die 1.65 Verarbeitung einer Datei mit Whitespace-getrennten Feldern 1.66 hat. Manche Implementierungen von cut, z.B. die von FreeBSD, 1.67 -haben Erweiterungen, die das gewuenschte Verhalten fuer 1.68 +haben aber Erweiterungen, die das gewuenschte Verhalten fuer 1.69 Whitespace-getrennte Felder bieten. Ansonsten, d.h. wenn 1.70 -man portabel bleiben will, hilft awk. 1.71 +man portabel bleiben will, verwendet man awk in diesen 1.72 +Faellen. 1.73 1.74 Awk bietet noch eine weitere Funktion, die cut missen 1.75 laesst: Das Tauschen der Feld-Reihenfolge in der Ausgabe. Bei 1.76 @@ -98,10 +104,11 @@ 1.77 von `cut -c 5-8,1,4-6' die Zeichen Nummer 1, 4, 5, 6, 7 und 8 1.78 in genau dieser Reihenfolge aus. Die Auswahl entspricht damit 1.79 der Mengenlehre in der Mathematik: Jedes angegebene Feld wird 1.80 -Teil der Ergebnismenge sein. Die Felder der Ergebnismenge sind 1.81 -dabei immer gleich geordnet wie sie es in der Eingabe waren. 1.82 -Oder, um die Worte der Manpage in Version 8 Unix 1.83 -wiederzugeben: ``In data base parlance, it projects a relation.'' 1.84 +Teil der Ergebnismenge. Die Felder der Ergebnismenge sind 1.85 +dabei immer gleich geordnet wie in der Eingabe. Um die Worte 1.86 +der Manpage XXX von Version 8 Unix wiederzugeben: ``In data base 1.87 +parlance, it projects a relation.'' 1.88 +[ XXX 1.89 Cut fuehrt also die Datenbankoperation Projektion auf 1.90 Textdateien aus. Die Wikipedia erklaert das in 1.91 verstaendlicherer Sprache: 1.92 @@ -116,8 +123,6 @@ 1.93 [ http://de.wikipedia.org/wiki/Projektion_(Informatik)#Projektion 1.94 1.95 1.96 - 1.97 - 1.98 Geschichtliches 1.99 1.100 Cut erblickte 1982 mit dem Release von UNIX System III das 1.101 @@ -130,6 +135,7 @@ 1.102 Quellcode von Version 1.5. Es muss also noch eine 1.103 Vorgeschichte geben. Zu dieser habe ich leider keinen Zugang 1.104 gefunden. 1.105 +XXX mail an TUHS 1.106 1.107 Aber werfen wir doch einen Blick auf die BSD-Linie: Dort ist mein 1.108 fruehester Fund ein cut.c mit dem Dateimodifikationsdatum 1.109 @@ -149,6 +155,7 @@ 1.110 Seine Manpage 1.111 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut/cut.1 1.112 erwaehnt bereits die erwartete Konformitaet mit POSIX.2. 1.113 +XXX 2 oder 3 modi? 1.114 Nun sollte man wissen, dass POSIX.2 erst im September 1.115 1992 veroeffentlicht wurde, also gut zwei Jahren *nachdem* die 1.116 Manpage und das Programm geschrieben wurden. Das Programm 1.117 @@ -157,39 +164,42 @@ 1.118 den Standardisierungsprozess geflossen; bis zur 1.119 Fertigstellung sollte es aber noch weitere zwei Jahre dauern. 1.120 1.121 +Das cut der GNU Coreutils enthaelt einen Copyrightvermerk von 1.122 +David M. Ihnat aus dem Jahr 1984. 1.123 + 1.124 Trotz all dieser Jahreszahlen aus den 80er Jahren gehoert cut 1.125 aus Sicht des urspruenglichen Unix zu den juengeren Tools. 1.126 Wenn cut auch ein Jahrzehnt aelter als Linux, der Kernel, ist, 1.127 so war Unix doch schon ueber zehn Jahre alt, als cut das 1.128 -erste Mal auftauchte. Insbesondere gehoerte cut noch nicht 1.129 +erste Mal auftauchte. Insbesondere gehoerte cut auch noch nicht 1.130 zu Version 7 Unix, das die Ausgangsbasis aller modernen 1.131 Unix-Systeme darstellt. Die weit komplexeren Programme sed 1.132 und awk waren dort schon vertreten. Man muss sich also 1.133 fragen, warum cut ueberhaupt noch entwickelt wurde, wo es 1.134 -schon zwei Programme gab, die die Aufgabe von cut abdeckten. 1.135 -Ein Argument fuer cut war sicher seine Kompaktheit und 1.136 +schon zwei Programme gab, die die Funktion von cut abdecken 1.137 +konnten. Ein Argument fuer cut war sicher seine Kompaktheit und 1.138 die damit verbundene Geschwindigkeit gegenueber dem damals 1.139 traegen awk. Diese schlanke Gestalt ist es auch, die der Unix 1.140 Philosopie entspricht: Mache eine Aufgabe und die richtig! 1.141 -So bewaehrte sich cut. Es wurde in andere Unix Varianten 1.142 -uebernommen, standardisiert und ist heutzutage ueberall 1.143 -anzutreffen. 1.144 +Cut ueberzeugte. Es wurde in andere Unix Varianten uebernommen, 1.145 +standardisiert und ist heutzutage ueberall anzutreffen. 1.146 1.147 -Die urspruengliche Variante (ohne -b) tauchte schon 1985 in 1.148 +Die urspruengliche Variante (ohne -b) wurde schon 1985 in 1.149 der System V Interface Definition, einer wichtigen formalen 1.150 -Beschreibung von UNIX System V, und in allen relevanten 1.151 -Standards seither auf. Mit POSIX.2 im Jahre 1992 wurde cut 1.152 -zum ersten Mal in der heutigen Form (mit -b) standardisiert. 1.153 +Beschreibung von UNIX System V, spezifiziert und tauchte 1.154 +anschliessend in allen relevanten Standards auf. Mit POSIX.2 1.155 +im Jahre 1992 wurde cut zum ersten Mal in der heutigen Form 1.156 +(mit -b) standardisiert. 1.157 +XXX sicher? s.o. 1.158 1.159 1.160 - 1.161 -Multibyte-Behandlung 1.162 +Multibyte-Unterstuetzung 1.163 1.164 Nun sind der Bytemodus und die damit verbundene 1.165 Multibyte-Verarbeitung des POSIX-Zeichenmodus bereits seit 1.166 1992 standardisiert, wie steht es aber mit deren Umsetzung? 1.167 Welche Versionen implementieren denn den POSIX korrekt? 1.168 -Die Situation ist mehrschichtig. Es gibt traditionelle 1.169 +Die Situation ist dreiteilig: Es gibt traditionelle 1.170 Implementierungen, die nur -c und -f kennen. Dann gibt es 1.171 Implementierungen die zwar -b kennen, es aber nur als Alias 1.172 fuer -c handhaben. Diese Implementierungen funktionieren mit 1.173 @@ -203,8 +213,8 @@ 1.174 System III, System V und die aller BSDs bis in die 90er. 1.175 1.176 Pseude-Multibyte-Implementierungen bieten GNU und die 1.177 -modernen NetBSDs und OpenBSDs. Wie sehr dort der Schein von 1.178 -POSIX-konformitaet gewahrt wird, ist unterschiedlich. Nicht 1.179 +modernen NetBSDs und OpenBSDs. Wie sehr dort ein Schein von 1.180 +POSIX-Konformitaet gewahrt wird, ist unterschiedlich. Nicht 1.181 immer findet man klare Aussagen wie diese: 1.182 1.183 /* Since we don't support multi-byte characters, the -c and -b 1.184 @@ -215,7 +225,7 @@ 1.185 Tatsaechlich standardkonforme Implementierungen, die 1.186 Multibytes korrekt handhaben, bekommt man bei einem modernen 1.187 FreeBSD und bei den Heirloom Tools. Bei FreeBSD hat Tim Robbins 1.188 -(tjr) im Sommer 2004 den Zeichenmodus POSIX-konform reimplementiert. 1.189 +im Sommer 2004 den Zeichenmodus POSIX-konform reimplementiert. 1.190 [ https://svnweb.freebsd.org/base?view=revision&revision=131194 1.191 Warum die beiden anderen grossen BSDs diese Aenderung nicht 1.192 uebernommen haben, bleibt offen. Es scheint aber an der im 1.193 @@ -224,12 +234,12 @@ 1.194 Wie findet man als Nutzer heraus, ob beim cut(1) des eigenen 1.195 Systems Multibytes korrekt unterstuetzt werden? Zuerst ist 1.196 entscheidend, ob das System selbst mit einem Multibyte-Encoding 1.197 -arbeitet, denn tut es das nicht, dann entsprechen sich Zeichen 1.198 -und Bytes und die Frage eruebrigt sich. Man kann dazu nachschauen, 1.199 -welches Locale eingestellt ist, aber einfacher ist es, ein 1.200 -typisches Mehrbytezeichen, wie z.B. einen Umlaut, auszugeben 1.201 -und zu schauen ob dieses in einem oder in mehreren Bytes 1.202 -kodiert ist: 1.203 +arbeitet, denn tut es das nicht, dann entsprechen sich naemlich 1.204 +Zeichen und Bytes und die Frage eruebrigt sich. Man kann das 1.205 +herausfinden indem man sich das Locale anschaut, aber einfacher 1.206 +ist es, ein typisches Mehrbytezeichen, wie z.B. einen Umlaut, 1.207 +auszugeben und zu schauen ob dieses in einem oder in mehreren 1.208 +Bytes kodiert ist: 1.209 1.210 $ echo รค | od -c 1.211 0000000 303 244 \n 1.212 @@ -238,7 +248,7 @@ 1.213 In diesem Fall sind es zwei Bytes: oktal 303 und 244 . (Den 1.214 Zeilenumbruch fuegt echo(1) hinzu.) 1.215 1.216 -Mit dem Programm iconv(1) kann man Test explizit in bestimmte 1.217 +Mit dem Programm iconv(1) kann man Text explizit in bestimmte 1.218 Kodierungen konvertieren. Hier Beispiele, wie das Ergebnis 1.219 bei Latin1 und wie es bei UTF-8 aussieht. 1.220 1.221 @@ -273,110 +283,95 @@ 1.222 werden die ersten beiden Bytes ausgegeben. 1.223 1.224 1.225 - 1.226 Implementierungen 1.227 1.228 -Nun zum Blick auf den Code. Hier soll eine Auswahl an 1.229 -Implementierungen etwas genauer betrachtet werden. Fuer einen 1.230 -ersten Eindruck ist der Umfang des Quellcodes hilfreich. 1.231 -Typischerweise steigt dieser ueber die Jahre an. Diese 1.232 +Nun ein Blick auf den Code. Betrachtet wird eine Auswahl an 1.233 +Implementierungen. 1.234 + 1.235 +Fuer einen ersten Eindruck ist der Umfang des Quellcodes 1.236 +hilfreich. Typischerweise steigt dieser ueber die Jahre an. Diese 1.237 Beobachtung kann hier in der Tendenz, aber nicht in jedem Fall, 1.238 -bestaetigt werden. 1.239 +bestaetigt werden. Die Unterstuetzung des Byte-Modus (-b) 1.240 +erfordert zwangslaeufig mehr Code, deshalb sind die 1.241 +POSIX-konformen Implementierungen tendenziell umfangreicher. 1.242 1.243 -Die Unterstuetzung des Byte-Modus (-b) erfordert zwangslaeufig 1.244 -mehr Code, deshalb ist zu erwarten, dass diejenigen 1.245 -Implementierungen, die ihn haben, umfangreicher sind. 1.246 1.247 -Codevergleich 1.248 + SLOC Zeilen Bytes Gehoert zu Dateidatum Kategorie 1.249 + ----------------------------------------------------------------- 1.250 + 116 123 2966 System III 1980-04-11 (trad) 1.251 + 118 125 3038 4.3BSD-UWisc 1986-11-07 (trad) 1.252 + 200 256 5715 4.3BSD-Reno 1990-06-25 (trad) 1.253 + 200 270 6545 NetBSD 1993-03-21 (trad) 1.254 + 218 290 6892 OpenBSD 2008-06-27 (pseudo) 1.255 + 224 296 6920 FreeBSD 1994-05-27 (trad) 1.256 + 232 306 7500 NetBSD 2014-02-03 (pseudo) 1.257 + 340 405 7423 Heirloom 2012-05-20 (POSIX) 1.258 + 382 586 14175 GNU coreutils 1992-11-08 (pseudo) 1.259 + 391 479 10961 FreeBSD 2012-11-24 (POSIX) 1.260 + 588 830 23167 GNU coreutils 2015-05-01 (pseudo) 1.261 +XXX verlinken 1.262 1.263 -SLOC Zeilen Bytes Gehoert zu Dateidatum Kategorie 1.264 ------------------------------------------------------------------ 1.265 -116 123 2966 System III 1980-04-11 (trad) 1.266 -118 125 3038 4.3BSD-UWisc 1986-11-07 (trad) 1.267 -200 256 5715 4.3BSD-Reno 1990-06-25 (trad) 1.268 -200 270 6545 NetBSD 1993-03-21 (trad) 1.269 -218 290 6892 OpenBSD 2008-06-27 (pseudo) 1.270 -224 296 6920 FreeBSD 1994-05-27 (trad) 1.271 -232 306 7500 NetBSD 2014-02-03 (pseudo) 1.272 -340 405 7423 Heirloom 2012-05-20 (POSIX) 1.273 -382 586 14175 GNU coreutils 1992-11-08 (pseudo) 1.274 -391 479 10961 FreeBSD 2012-11-24 (POSIX) 1.275 -588 830 23167 GNU coreutils 2015-05-01 (pseudo) 1.276 1.277 +Das Kandidatenfeld teilt sich grob in vier Gruppen: (1) Die zwei 1.278 +urspruenglichen Implementierungen, die sich nur minimal 1.279 +unterscheiden, mit gut 100 SLOCs. (2) Die fuenf BSD-Versionen mit 1.280 +gut 200 SLOCs. (3) Die zwei POSIX-konformen Programme und 1.281 +die alte GNU-Version mit 340-390 SLOCs. Und (4) die moderne 1.282 +GNU-Variante mit fast 600 SLOCs. 1.283 1.284 -$ awk -F' +' '{printf("%d\t%d (%.2f)\t%d (%.2f)\t%s\t%s\t%s\n", 1.285 - $1, $2, $2/$1, $3, $3/$1, $4, $5, $6);}' <sloc 1.286 -116 123 (1.06) 2966 (25.57) System III 1980-04-11 (trad) 1.287 -118 125 (1.06) 3038 (25.75) 4.3BSD-UWisc 1986-11-07 (trad) 1.288 -200 256 (1.28) 5715 (28.57) 4.3BSD-Reno 1990-06-25 (trad) 1.289 -200 270 (1.35) 6545 (32.73) NetBSD 1993-03-21 (trad) 1.290 -218 290 (1.33) 6892 (31.61) OpenBSD 2008-06-27 (pseudo) 1.291 -224 296 (1.32) 6920 (30.89) FreeBSD 1994-05-27 (trad) 1.292 -232 306 (1.32) 7500 (32.33) NetBSD 2014-02-03 (pseudo) 1.293 -340 405 (1.19) 7423 (21.83) Heirloom 2012-05-20 (POSIX) 1.294 -382 586 (1.53) 14175 (37.11) GNU coreutils 1992-11-08 (pseudo) 1.295 -391 479 (1.23) 10961 (28.03) FreeBSD 2012-11-24 (POSIX) 1.296 -588 830 (1.41) 23167 (39.40) GNU coreutils 2015-05-01 (pseudo) 1.297 +Die Abweichung zwischen logischen Codezeilen (SLOC, ermittelt mit 1.298 +SLOCcount) und der Anzahl von Zeilenumbruechen in der Datei (`wc 1.299 +-l') erstreckt sich ueber einen Faktor von 1.06 bei den aeltesten 1.300 +Vertretern bis zu Faktor 1.5 bei GNU. Der groesste 1.301 +Einflussfaktor darauf sind Leerzeilen, reine Kommentarzeilen und 1.302 +die Groesse des Lizenzblocks am Dateianfang. 1.303 1.304 +Betrachtet man die Abweichungen zwischen den logischen Codezeilen 1.305 +und der Dateigroesse (`wc -c'), so pendelt das Teilnehmerfeld 1.306 +zwischen 25 und 30 Bytes je Anweisung. Die Heirloom-Implementierung 1.307 +weicht mit nur 21 nach unten ab, die GNU-Implementierungen mit 1.308 +fast 40 nach oben. Dies liegt bei GNU hauptsaechlich am 1.309 +Programmierstil, mit spezieller Einrueckung und langen Bezeichnern. 1.310 +Ob man die Heirloom-Implementierung als besonders kryptisch 1.311 +oder als besonders elegant bezeichnen will, das soll der 1.312 +eigenen Einschaetzung des Lesers ueberlassen bleiben. 1.313 1.314 -Einige Auffaelligkeiten: 1.315 1.316 -Das Kandidatenfeld teilt sich grob in vier Gruppen: Die zwei urspruenglichen 1.317 -Implementierungen, die sich nur minimal unterscheiden, mit gut 100 SLOCs. 1.318 -Dann die fuenf BSD-Versionen mit knapp ueber 200 SLOCs. Anschliessend die 1.319 -zwei POSIX-konformen Programme und die alte GNU-Version mit 350-400 1.320 -SLOCs. Und zum Abschluss die moderne GNU-Variante mit fast 600 SLOCs. 1.321 +Schaut man sich die SCCS-IDs (die vom damaligen 1.322 +Versionskontrollsystem eingefuegt wurden) in den BSD-Quellen an, 1.323 +dann findet man dort Versionsnummern, die die Entwicklung 1.324 +dokumentieren: 1.325 1.326 -Die Abweichung von logischen Codezeilen (nach der Definition von 1.327 -SLOCcount) und der Anzahl von Zeilenumbruechen in der Datei erstreckt 1.328 -sich ueber einen Faktor von 1.06 bei den aeltesten Vertretern bis zu 1.329 -Faktor 1.5 bei GNU. 1.330 - 1.331 -Betrachtet man die Abweichungen zwischen den logischen Codezeilen und der 1.332 -Dateigroesse, so pendelt das Teilnehmerfeld zwischen 25 und 30 Bytes je 1.333 -Anweisung. Die Heirloom-Implementierung weicht nach unten ab, die 1.334 -GNU-Implementierungen nach oben. 1.335 - 1.336 - 1.337 - 1.338 -Das cut in System III von 1980 ist, wie man anhand der SCCS-ID erkennen 1.339 -kann bereits in Version 1.5. Die Vorversionen konnte ich aber leider nicht 1.340 -ermitteln. 1.341 - 1.342 -Schaut man sich die SCCS-IDs in den BSD-Quellen an, dann findet man dort 1.343 -Versionsnummern, die die Entwicklung dokumentieren: 1.344 - 1.345 -4.3bsd-uwisc "@(#)cut.c 1.3"; 1.346 -4.3bsd-reno "@(#)cut.c 5.3 (Berkeley) 6/24/90"; 1.347 -netbsd "@(#)cut.c 5.4 (Berkeley) 10/30/90"; 1.348 -freebsd "@(#)cut.c 8.1 (Berkeley) 6/6/93"; 1.349 + 4.3bsd-uwisc "@(#)cut.c 1.3"; 1.350 + 4.3bsd-reno "@(#)cut.c 5.3 (Berkeley) 6/24/90"; 1.351 + netbsd "@(#)cut.c 5.4 (Berkeley) 10/30/90"; 1.352 + freebsd "@(#)cut.c 8.1 (Berkeley) 6/6/93"; 1.353 1.354 Die neueren BSD-Versionen enthalten zwar weiterhin eine SCCS-ID, diese 1.355 ist aber bei Version "8.3 (Berkeley) 5/4/95" stehen geblieben. Danach 1.356 -wurde scheinbar von SCCS auf CSV oder SVN gewechselt. 1.357 +wurde scheinbar von SCCS auf ein anderes 1.358 +Versionskontrollsystem gewechselt. 1.359 +XXX 1.360 1.361 Bei GNU befindet sich folgender Copyright-Vermerk im Code: 1.362 1.363 - Copyright (C) 1997-2015 Free Software Foundation, Inc. 1.364 - Copyright (C) 1984 David M. Ihnat 1.365 + Copyright (C) 1997-2015 Free Software Foundation, Inc. 1.366 + Copyright (C) 1984 David M. Ihnat 1.367 1.368 -Wie aus weiteren Kommentaren zu entnehmen ist, wurde der Code von zuerst 1.369 -von David MacKenzie und spaeter von Jim Meyering ueberarbeitet. Letzterer 1.370 -hat den Code 1992 auch ins Versionkontrollsystem eingestellt. Weshalb 1.371 -die Jahre zwischen 1992 und 1997 nicht im Copyright-Vermerk auftauchen, 1.372 -ist unklar. 1.373 - 1.374 - 1.375 +Der Code hat also ziemlich alte Urspruenge. Wie aus weiteren 1.376 +Kommentaren zu entnehmen ist, wurde der Code zuerst von David 1.377 +MacKenzie und spaeter von Jim Meyering ueberarbeitet. Letzterer 1.378 +hat den Code 1992 auch ins Versionkontrollsystem eingestellt. 1.379 +Weshalb die Jahre zwischen 1992 und 1997 nicht im Copyright-Vermerk 1.380 +auftauchen, ist unklar. 1.381 1.382 1.383 Beschreibungen 1.384 1.385 -Interessant ist ein Vergleich der Kurzbeschreibungen von cut, 1.386 -wie sie sich in der Titelzeile von Manpages oder manchmal auch 1.387 -am Anfang der Quellcodedatei finden. 1.388 - 1.389 -Die folgende Liste ist grob nach Zeit geordnet und nach 1.390 -Abstammung gruppiert: 1.391 +Interessant ist auch ein Vergleich der Kurzbeschreibungen von 1.392 +cut, wie sie sich in der Titelzeile von Manpages oder manchmal 1.393 +auch am Anfang der Quellcodedatei finden. Die folgende Liste 1.394 +ist grob zeitlich geordnet und nach Abstammung gruppiert: 1.395 1.396 1.397 System III cut out selected fields of each line of a file 1.398 @@ -392,10 +387,10 @@ 1.399 FreeBSD 7.0 cut out selected portions of each line of a file 1.400 SunOS 4.1.3 remove selected fields from each line of a file 1.401 SunOS 5.5.1 cut out selected fields of each line of a file 1.402 +XXX FreeBSD 10 1.403 1.404 Heirloom Tools cut out selected fields of each line of a file 1.405 - 1.406 -POSIX cut out selected fields of each line of a file 1.407 +Heirloom Tools (src) cut out fields of lines of files 1.408 1.409 GNU coreutils remove sections from each line of files 1.410 1.411 @@ -404,24 +399,32 @@ 1.412 Version 8 Unix rearrange columns of data 1.413 ``Unix Reader'' rearrange columns of text 1.414 1.415 +POSIX cut out selected fields of each line of a file 1.416 1.417 -Die zwei mit ``(src)'' markierten Beschreibungen sind aus 1.418 -dem Quellcode entnommen, und verdeutlichen den Codetransfer. 1.419 -POSIX ist ein Set von Standards, keine Implementierung. Der 1.420 -``Unix Reader'' ist ein rueckblickendes Textdokument von 1.421 + 1.422 +Die mit ``(src)'' markierten Beschreibungen sind aus dem 1.423 +jeweiligen Quellcode entnommen. 1.424 +Der POSIX-Eintrag enthaelt die Beschreibung des Standards. 1.425 +Der ``Unix Reader'' ist ein rueckblickendes Textdokument von 1.426 Doug McIlroy, das das Auftreten von Tools in der Geschichte 1.427 -des Research Unix zum Thema hat. Alle uebrigen Beschreibungen 1.428 -entstammen den Manpages. 1.429 +des Research Unix zum Thema hat. 1.430 +[ XXX 1.431 +Eigentlich sollte seine 1.432 +Beschreibung der in Version 8 Unix entsprechen. Die 1.433 +Abweichung koennte sowohl ein Uebertragungsfehler als auch 1.434 +eine nachtraegliche Korrektur sein. 1.435 +Alle uebrigen Beschreibungen entstammen den Manpages. 1.436 1.437 -Zumeist ist mit der Zeit die POSIX-Beschreibung uebernommen 1.438 +Oft ist mit der Zeit die POSIX-Beschreibung uebernommen 1.439 worden, wie beispielsweise bei FreeBSD zu sehen. 1.440 [ https://svnweb.freebsd.org/base?view=revision&revision=167101 1.441 +XXX fixme! 1.442 1.443 Interessant ist, dass die GNU coreutils seit Anbeginn vom 1.444 Entfernen von Teilen der Eingabe sprechen, wohingegen die 1.445 Kommandozeilenangabe klar ein Auswaehlen darstellt. Die 1.446 -Worte ``cut out'' sind vielleicht auch nicht klar genug. 1.447 -HP-UX hat sie deshalb praezisiert. 1.448 +Worte ``cut out'' sind vielleicht auch etwas 1.449 +missverstaendlich. HP-UX hat sie deshalb praezisiert. 1.450 1.451 Auch beim Begriff, was denn nun selektiert wird, ist man sich 1.452 uneins. Die einen reden von Feldern (POSIX), andere von 1.453 @@ -432,8 +435,6 @@ 1.454 unzutreffendste der Beschreibungen. 1.455 1.456 1.457 - 1.458 - 1.459 Autoreninfo 1.460 1.461 Markus Schnalke interessiert sich fuer die Hintergruende