docs/cut

diff cut.txt @ 0:5efb052a0d9e

Zwischenstand
author markus schnalke <meillo@marmaro.de>
date Sat, 02 May 2015 09:54:00 +0200
parents
children a3f18ccc3996
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/cut.txt	Sat May 02 09:54:00 2015 +0200
     1.3 @@ -0,0 +1,109 @@
     1.4 +Das Werkzeugkaestle
     1.5 +
     1.6 +#1:  cut - cut out selected fields of each line of a file
     1.7 +---------------------------------------------------------
     1.8 +markus schnalke, 2015-04
     1.9 +
    1.10 +
    1.11 +Cut ist eines der klassischen Programme im Unix-Werkzeugkasten.
    1.12 +In keinem ordentlichen Tutorial zur Shellprogrammierung darf
    1.13 +es fehlen. Es ist ein schoenes Anschauungs- und Beispielobjekt
    1.14 +fuer's Shellscripting. Hier soll es portraitiert werden.
    1.15 +
    1.16 +
    1.17 +Die Funktionsbasis von cut sind urspruenglich zwei Modi, die
    1.18 +spaeter um einen dritten erweitert wurden. Entweder cut
    1.19 +schneidet bestimmte Zeichen aus den Zeilen der Eingabe oder
    1.20 +bestimmte durch Trennzeichen definierte Felder.
    1.21 +
    1.22 +Der Zeichenmodus ist besonders praktisch um bestimmte Teile
    1.23 +von Kommandoausgaben zu extrahieren. Ein populaeres
    1.24 +Beispiel ist die Jahreszahl, die aus einer Datumsangabe
    1.25 +herausgeschnitten werden soll, insofern das Datumsformat
    1.26 +nicht frei gewaehlt werden kann. Ein anderer Anwendungsfall
    1.27 +ist die Extraktion bestimmter Zugriffsrecht. Hier z.B. die
    1.28 +Rechte fuer den Besitzer:
    1.29 +
    1.30 +	ls -l foo | cut -c 2-4
    1.31 +
    1.32 +Oder die Schreibrechte fuer die Gruppe und alle anderen:
    1.33 +
    1.34 +	ls -l | cut -c 6,9
    1.35 +
    1.36 +Damit ist die grundsaetzliche Verwendung von cut
    1.37 +demonstriert.
    1.38 +
    1.39 +Die fuer POSIX wichtige Funktion von cut ist die Faehigkeit
    1.40 +lange Zeilen zu kuerzen.
    1.41 +
    1.42 +	cut -c -80
    1.43 +
    1.44 +Dieser Befehl uebernimmt nur die ersten 80 Zeichen der
    1.45 +Eingabe in die Ausgabe. Der Rest der Zeilen wird einfach
    1.46 +abgeschnitten, koennte aber mit `cut -c 81-' extrahiert
    1.47 +werden.
    1.48 +
    1.49 +Achtzig Zeichen erinnert unweigerlich an VT100-Terminals,
    1.50 +das 80 Zeichen pro Zeile darstellen kann. Geht es aber nicht
    1.51 +um die Darstellung von Zeichen sondern um ihre Speicherung,
    1.52 +dann ist `-c' nicht unbedingt die passende Option zur Kuerzung
    1.53 +langer Zeilen.
    1.54 +
    1.55 +Frueher als US-ASCII das omnipraesente Charset und Encoding
    1.56 +war, war jedes Zeichen durch genau ein Byte kodiert und somit
    1.57 +beschnitt `cut -c' sowohl nach Ausgabezeichen als auch nach
    1.58 +Datenmenge. Als aber Multibyte-Kodierungen, wie UTF-8, aufkamen,
    1.59 +musste man sich von dieser Annahme loesen. In diesem Zug
    1.60 +bekam cut mit POSIX.2 die Option `-b'. Diese selektiert nach
    1.61 +Bytes. Will man also nur die ersten maximal 63 Bytes vor dem
    1.62 +Newline-Zeichen stehen haben (und den Rest stillschweigend
    1.63 +ignorieren), dann macht man das mit:
    1.64 +
    1.65 +	cut -b -63
    1.66 +
    1.67 +
    1.68 +Neben dem Zeichen- bzw. Byte-Modus bietet cut noch den
    1.69 +interessanteren Feld-Modus, den man mit `-f' einleitet. Mit ihm
    1.70 +koennen Felder ausgewaehlt werden. Das Trennzeichen -- per
    1.71 +Default der Tab -- kann mit `-d' geaendert werden.
    1.72 +
    1.73 +Der typische Anwendungsfall fuer den Feld-Modus. Ist die
    1.74 +Extraktion von Information aus der passwd-Datei. So z.B. der
    1.75 +Username, die User-ID und das Homeverzeichnis:
    1.76 +
    1.77 +	cut -d: -f1,3,6 /etc/passwd
    1.78 +
    1.79 +(Die Argumente fuer die Optionen koennen bei cut uebrigens
    1.80 +direkt angehaengt oder mit Whitespace abgetrennt folgen.)
    1.81 +
    1.82 +
    1.83 +Dieser Feld-Modus ist fuer einfache tabellarische Dateien
    1.84 +(wie eben die passwd) gut geeignet, kommt aber schnell an
    1.85 +seine Grenzen. Gerade der uebliche Fall, dass an Whitespace
    1.86 +in Felder geteilt werden soll, wird damit nicht abgedeckt.
    1.87 +Der Delimiter kann nur genau ein Zeichen sein. Es kann also
    1.88 +nicht sowohl an Leerzeichen als auch an Tabs getrennt werden.
    1.89 +Auch unterteilt cut an jedem Trennzeichen. Zwei aneinander
    1.90 +stehende Trennzeichen fuehren zu einem leeren Feld. Solches
    1.91 +Verhalten ist fuer Whitespace-getrennte Felder unangemessen.
    1.92 +Diese Aufgaben deckt aber zum Glueck awk ab, so dass die
    1.93 +Alternative zur Hand ist.
    1.94 +
    1.95 +Awk hat eine weitere Funktion, die
    1.96 +cut missen laesst: Das Tauschen der Feld-Reihenfolge.
    1.97 +
    1.98 +
    1.99 +
   1.100 +
   1.101 +
   1.102 +Geschichtliches
   1.103 +
   1.104 +Cut erblickte in XXX das Licht der Welt. Im Verleich zu
   1.105 +XXX stiess es erst relativ spaet XXX
   1.106 +
   1.107 +XXX ueber XXX floss
   1.108 +es in den XXX Standard ein, wo es seither residiert.
   1.109 +
   1.110 +Standardisierung
   1.111 +
   1.112 +Verbreitung