docs/cut

annotate cut.txt @ 0:5efb052a0d9e

Zwischenstand
author markus schnalke <meillo@marmaro.de>
date Sat, 02 May 2015 09:54:00 +0200
parents
children a3f18ccc3996
rev   line source
meillo@0 1 Das Werkzeugkaestle
meillo@0 2
meillo@0 3 #1: cut - cut out selected fields of each line of a file
meillo@0 4 ---------------------------------------------------------
meillo@0 5 markus schnalke, 2015-04
meillo@0 6
meillo@0 7
meillo@0 8 Cut ist eines der klassischen Programme im Unix-Werkzeugkasten.
meillo@0 9 In keinem ordentlichen Tutorial zur Shellprogrammierung darf
meillo@0 10 es fehlen. Es ist ein schoenes Anschauungs- und Beispielobjekt
meillo@0 11 fuer's Shellscripting. Hier soll es portraitiert werden.
meillo@0 12
meillo@0 13
meillo@0 14 Die Funktionsbasis von cut sind urspruenglich zwei Modi, die
meillo@0 15 spaeter um einen dritten erweitert wurden. Entweder cut
meillo@0 16 schneidet bestimmte Zeichen aus den Zeilen der Eingabe oder
meillo@0 17 bestimmte durch Trennzeichen definierte Felder.
meillo@0 18
meillo@0 19 Der Zeichenmodus ist besonders praktisch um bestimmte Teile
meillo@0 20 von Kommandoausgaben zu extrahieren. Ein populaeres
meillo@0 21 Beispiel ist die Jahreszahl, die aus einer Datumsangabe
meillo@0 22 herausgeschnitten werden soll, insofern das Datumsformat
meillo@0 23 nicht frei gewaehlt werden kann. Ein anderer Anwendungsfall
meillo@0 24 ist die Extraktion bestimmter Zugriffsrecht. Hier z.B. die
meillo@0 25 Rechte fuer den Besitzer:
meillo@0 26
meillo@0 27 ls -l foo | cut -c 2-4
meillo@0 28
meillo@0 29 Oder die Schreibrechte fuer die Gruppe und alle anderen:
meillo@0 30
meillo@0 31 ls -l | cut -c 6,9
meillo@0 32
meillo@0 33 Damit ist die grundsaetzliche Verwendung von cut
meillo@0 34 demonstriert.
meillo@0 35
meillo@0 36 Die fuer POSIX wichtige Funktion von cut ist die Faehigkeit
meillo@0 37 lange Zeilen zu kuerzen.
meillo@0 38
meillo@0 39 cut -c -80
meillo@0 40
meillo@0 41 Dieser Befehl uebernimmt nur die ersten 80 Zeichen der
meillo@0 42 Eingabe in die Ausgabe. Der Rest der Zeilen wird einfach
meillo@0 43 abgeschnitten, koennte aber mit `cut -c 81-' extrahiert
meillo@0 44 werden.
meillo@0 45
meillo@0 46 Achtzig Zeichen erinnert unweigerlich an VT100-Terminals,
meillo@0 47 das 80 Zeichen pro Zeile darstellen kann. Geht es aber nicht
meillo@0 48 um die Darstellung von Zeichen sondern um ihre Speicherung,
meillo@0 49 dann ist `-c' nicht unbedingt die passende Option zur Kuerzung
meillo@0 50 langer Zeilen.
meillo@0 51
meillo@0 52 Frueher als US-ASCII das omnipraesente Charset und Encoding
meillo@0 53 war, war jedes Zeichen durch genau ein Byte kodiert und somit
meillo@0 54 beschnitt `cut -c' sowohl nach Ausgabezeichen als auch nach
meillo@0 55 Datenmenge. Als aber Multibyte-Kodierungen, wie UTF-8, aufkamen,
meillo@0 56 musste man sich von dieser Annahme loesen. In diesem Zug
meillo@0 57 bekam cut mit POSIX.2 die Option `-b'. Diese selektiert nach
meillo@0 58 Bytes. Will man also nur die ersten maximal 63 Bytes vor dem
meillo@0 59 Newline-Zeichen stehen haben (und den Rest stillschweigend
meillo@0 60 ignorieren), dann macht man das mit:
meillo@0 61
meillo@0 62 cut -b -63
meillo@0 63
meillo@0 64
meillo@0 65 Neben dem Zeichen- bzw. Byte-Modus bietet cut noch den
meillo@0 66 interessanteren Feld-Modus, den man mit `-f' einleitet. Mit ihm
meillo@0 67 koennen Felder ausgewaehlt werden. Das Trennzeichen -- per
meillo@0 68 Default der Tab -- kann mit `-d' geaendert werden.
meillo@0 69
meillo@0 70 Der typische Anwendungsfall fuer den Feld-Modus. Ist die
meillo@0 71 Extraktion von Information aus der passwd-Datei. So z.B. der
meillo@0 72 Username, die User-ID und das Homeverzeichnis:
meillo@0 73
meillo@0 74 cut -d: -f1,3,6 /etc/passwd
meillo@0 75
meillo@0 76 (Die Argumente fuer die Optionen koennen bei cut uebrigens
meillo@0 77 direkt angehaengt oder mit Whitespace abgetrennt folgen.)
meillo@0 78
meillo@0 79
meillo@0 80 Dieser Feld-Modus ist fuer einfache tabellarische Dateien
meillo@0 81 (wie eben die passwd) gut geeignet, kommt aber schnell an
meillo@0 82 seine Grenzen. Gerade der uebliche Fall, dass an Whitespace
meillo@0 83 in Felder geteilt werden soll, wird damit nicht abgedeckt.
meillo@0 84 Der Delimiter kann nur genau ein Zeichen sein. Es kann also
meillo@0 85 nicht sowohl an Leerzeichen als auch an Tabs getrennt werden.
meillo@0 86 Auch unterteilt cut an jedem Trennzeichen. Zwei aneinander
meillo@0 87 stehende Trennzeichen fuehren zu einem leeren Feld. Solches
meillo@0 88 Verhalten ist fuer Whitespace-getrennte Felder unangemessen.
meillo@0 89 Diese Aufgaben deckt aber zum Glueck awk ab, so dass die
meillo@0 90 Alternative zur Hand ist.
meillo@0 91
meillo@0 92 Awk hat eine weitere Funktion, die
meillo@0 93 cut missen laesst: Das Tauschen der Feld-Reihenfolge.
meillo@0 94
meillo@0 95
meillo@0 96
meillo@0 97
meillo@0 98
meillo@0 99 Geschichtliches
meillo@0 100
meillo@0 101 Cut erblickte in XXX das Licht der Welt. Im Verleich zu
meillo@0 102 XXX stiess es erst relativ spaet XXX
meillo@0 103
meillo@0 104 XXX ueber XXX floss
meillo@0 105 es in den XXX Standard ein, wo es seither residiert.
meillo@0 106
meillo@0 107 Standardisierung
meillo@0 108
meillo@0 109 Verbreitung