9.4 cut, paste, tac und tr – Dateiinhalte ändern
cut
Dateien (und auch die Standardeingabe) können Sie mit dem Programm cut auf die eigenen Bedürfnisse zuschneiden. Besonders bei der Erstellung von Shellskripten spielen solche Funktionalität eine wichtige Rolle, da oftmals Datenströme angepasst werden müssen, um bestimmte Ausgaben zu erreichen. (Solch eine Aufgabe könnte man oft jedoch genauso gut oder noch besser mit awk lösen.)
Das Programm cut kann die Eingabedaten auf zwei Weisen zurechtschneiden: nach Spalten (-c) und nach Feldern (-f). Dabei werden die Nummern der jeweiligen Einheit durch Kommas getrennt bzw. mit einem »-« verbunden.
[zB]Im Folgenden soll die Datei /etc/hosts, die aus drei Spalten besteht, die jeweils durch ein Leerzeichen voneinander getrennt sind, [Fn. Dies ist oftmals nicht der Fall, es könnten auch Tab-Zeichen oder mehrere Leerzeichen sein.] an unsere Bedürfnisse angepasst werden. Die erste Spalte der Datei gibt die IP-Adresse eines Computers an, die zweite seinen vollen Domainnamen und die dritte seinen Hostnamen. Wir interessieren uns nun ausschließlich für die IP-Adresse und den Hostnamen.
Da die einzelnen Felder durch ein Leerzeichen getrennt sind, geben wir dies durch den Parameter -d als Trennzeichen für die Spalten an. Da es sich beim Leerzeichen um ein nicht druckbares Zeichen handelt, escapen wir es, indem wir ihm einen Backslash voranstellen: »\ «
Listing 9.9 Beispielanwendung für cut
$ cut -d\ -f 1,3 /etc/hosts
127.0.0.1 localhost
192.168.0.1 merkur
192.168.0.2 venus
192.168.0.3 erde
192.168.0.4 mars
192.168.0.5 jupiter
paste
paste fügt Dateiinhalte über ein angebbares Trennungszeichen zeilenweise zusammen.
Schauen wir uns einmal die Ausgabe des obigen cut-Beispiels an. Dort geben wir die IP-Adressen und die Hostnamen der Rechner im Netzwerk aus. In der folgenden Situation gehen wir davon aus, dass die IP-Adressen in der Datei IPAdressen und die Hostnamen in der Datei Hostnames untergebracht sind. Wir möchten nun eine zeilenweise Zuordnung erstellen, wobei die einzelnen Spalten durch einen Doppelpunkt voneinander getrennt sein sollen.
Listing 9.10 Beispiel für das Zusammenfügen zweier Dateien
$ paste -d : IPAdressen Hostnames
127.0.0.1 localhost
192.168.0.1:merkur
192.168.0.2:venus
192.168.0.3:erde
192.168.0.4:mars
192.168.0.5:jupiter
tac
Es könnte vorkommen, dass ein Dateiinhalt in einer Form vorliegt, die umgekehrt werden muss. In diesem Fall hilft tac sehr einfach weiter – es dreht den Dateiinhalt nämlich um. Wie Sie sehen, gibt es in der Unix-Konsole für so ziemlich jeden denkbaren Editiervorgang ein Programm.
Listing 9.11 Das Tool tac dreht unsere hosts-Datei um.
$ tac /etc/hosts
192.168.0.5 jupiter.sun jupiter
192.168.0.4 mars.sun mars
192.168.0.3 erde.sun erde
192.168.0.2 venus.sun venus
192.168.0.1 merkur.sun merkur
127.0.0.1 localhost localhost
tr
Das Tool tr ersetzt Zeichen in Text-Streams. Dabei können ganze Zeichenbereiche, also etwa [a-z], angegeben werden. Ein Aufruf von tr hat mindestens zwei Parameter: das Zeichen oder der Zeichenbereich, der ersetzt werden soll, und das Zeichen oder der Zeichenbereich, der anstelle des alten Zeichen(bereichs) eingesetzt werden soll. Möchte man etwa alle Kleinbuchstaben eines Textes durch Großbuchstaben ersetzen, könnte man dies folgendermaßen tun:
Listing 9.12 Das Werkzeug tr
$ echo hallo | tr '[a-z]' '[A-Z]'
HALLO
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.