docs/cut
changeset 0:5efb052a0d9e
Zwischenstand
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Sat, 02 May 2015 09:54:00 +0200 |
parents | |
children | a3f18ccc3996 |
files | cut.txt |
diffstat | 1 files changed, 109 insertions(+), 0 deletions(-) [+] |
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