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 wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cut.txt	Sat May 02 09:54:00 2015 +0200
@@ -0,0 +1,109 @@
+Das Werkzeugkaestle
+
+#1:  cut - cut out selected fields of each line of a file
+---------------------------------------------------------
+markus schnalke, 2015-04
+
+
+Cut ist eines der klassischen Programme im Unix-Werkzeugkasten.
+In keinem ordentlichen Tutorial zur Shellprogrammierung darf
+es fehlen. Es ist ein schoenes Anschauungs- und Beispielobjekt
+fuer's Shellscripting. Hier soll es portraitiert werden.
+
+
+Die Funktionsbasis von cut sind urspruenglich zwei Modi, die
+spaeter um einen dritten erweitert wurden. Entweder cut
+schneidet bestimmte Zeichen aus den Zeilen der Eingabe oder
+bestimmte durch Trennzeichen definierte Felder.
+
+Der Zeichenmodus ist besonders praktisch um bestimmte Teile
+von Kommandoausgaben zu extrahieren. Ein populaeres
+Beispiel ist die Jahreszahl, die aus einer Datumsangabe
+herausgeschnitten werden soll, insofern das Datumsformat
+nicht frei gewaehlt werden kann. Ein anderer Anwendungsfall
+ist die Extraktion bestimmter Zugriffsrecht. Hier z.B. die
+Rechte fuer den Besitzer:
+
+	ls -l foo | cut -c 2-4
+
+Oder die Schreibrechte fuer die Gruppe und alle anderen:
+
+	ls -l | cut -c 6,9
+
+Damit ist die grundsaetzliche Verwendung von cut
+demonstriert.
+
+Die fuer POSIX wichtige Funktion von cut ist die Faehigkeit
+lange Zeilen zu kuerzen.
+
+	cut -c -80
+
+Dieser Befehl uebernimmt nur die ersten 80 Zeichen der
+Eingabe in die Ausgabe. Der Rest der Zeilen wird einfach
+abgeschnitten, koennte aber mit `cut -c 81-' extrahiert
+werden.
+
+Achtzig Zeichen erinnert unweigerlich an VT100-Terminals,
+das 80 Zeichen pro Zeile darstellen kann. Geht es aber nicht
+um die Darstellung von Zeichen sondern um ihre Speicherung,
+dann ist `-c' nicht unbedingt die passende Option zur Kuerzung
+langer Zeilen.
+
+Frueher als US-ASCII das omnipraesente Charset und Encoding
+war, war jedes Zeichen durch genau ein Byte kodiert und somit
+beschnitt `cut -c' sowohl nach Ausgabezeichen als auch nach
+Datenmenge. Als aber Multibyte-Kodierungen, wie UTF-8, aufkamen,
+musste man sich von dieser Annahme loesen. In diesem Zug
+bekam cut mit POSIX.2 die Option `-b'. Diese selektiert nach
+Bytes. Will man also nur die ersten maximal 63 Bytes vor dem
+Newline-Zeichen stehen haben (und den Rest stillschweigend
+ignorieren), dann macht man das mit:
+
+	cut -b -63
+
+
+Neben dem Zeichen- bzw. Byte-Modus bietet cut noch den
+interessanteren Feld-Modus, den man mit `-f' einleitet. Mit ihm
+koennen Felder ausgewaehlt werden. Das Trennzeichen -- per
+Default der Tab -- kann mit `-d' geaendert werden.
+
+Der typische Anwendungsfall fuer den Feld-Modus. Ist die
+Extraktion von Information aus der passwd-Datei. So z.B. der
+Username, die User-ID und das Homeverzeichnis:
+
+	cut -d: -f1,3,6 /etc/passwd
+
+(Die Argumente fuer die Optionen koennen bei cut uebrigens
+direkt angehaengt oder mit Whitespace abgetrennt folgen.)
+
+
+Dieser Feld-Modus ist fuer einfache tabellarische Dateien
+(wie eben die passwd) gut geeignet, kommt aber schnell an
+seine Grenzen. Gerade der uebliche Fall, dass an Whitespace
+in Felder geteilt werden soll, wird damit nicht abgedeckt.
+Der Delimiter kann nur genau ein Zeichen sein. Es kann also
+nicht sowohl an Leerzeichen als auch an Tabs getrennt werden.
+Auch unterteilt cut an jedem Trennzeichen. Zwei aneinander
+stehende Trennzeichen fuehren zu einem leeren Feld. Solches
+Verhalten ist fuer Whitespace-getrennte Felder unangemessen.
+Diese Aufgaben deckt aber zum Glueck awk ab, so dass die
+Alternative zur Hand ist.
+
+Awk hat eine weitere Funktion, die
+cut missen laesst: Das Tauschen der Feld-Reihenfolge.
+
+
+
+
+
+Geschichtliches
+
+Cut erblickte in XXX das Licht der Welt. Im Verleich zu
+XXX stiess es erst relativ spaet XXX
+
+XXX ueber XXX floss
+es in den XXX Standard ein, wo es seither residiert.
+
+Standardisierung
+
+Verbreitung