Strings ändern, Unixoide Tools

Zur Verarbeitung von Zeichenketten (Strings) stellen Unixoide System traditionell einige Werkzeuge zur Verfügung. Ich beschreibe hier ein paar davon im Hinblick auf deren Einsatz- Zweck und die jeweiligen Grenzen. Ich bleibe dabei oberflächlich, das geschriebene soll für jedes der Werkzeuge einen Schnelleinstieg möglich machen und ein Gefühl für den Syntax vermitteln.

Grundlagen

Wenn links wiedergegeben werden, dann entspricht das Datum des letzten Aufrufs dem jeweiligen Bearbeitungsstand dieses Blogeintrages.

Alle Beispiele wurden auf einem Mac- Book Pro unter Mac OS X getestet.

Grundsätzlich sind die hier vorgestellten Werkzeuge dazu da, Zeichenketten zu verändern. Andere wichtige, hier nicht behandelte Werkzeuge dienen lediglich der Auswertung von Zeichenketten. Die wichtigsten sind: grep (oft zusammen mit Regulären Ausdrücken: —regexp) und find.

Alle Werkzeuge lesen Zeichen aus einem Eingabestrom (einer Datei) und geben das Ergebniss auf stdout aus. arbeiten nahtlos mit Umleitungen „>“ , „>>“ oder Pipes „|“ zusammen.

tr

Steht für Translate. Eignet sich immer dann, wenn man einzelne Zeichen ändern möchte. Man kann zwar mehr als ein zu änderndes oder zu löschendes Zeichen angeben, die werden aber nicht als zusammenhängendes Wort interpretiert, sondern bleiben einzelne Buchstaben

tr 'a' 'b' < Datei.txt

Wandelt alle „a“ aus der Eingabe Datei in ein „b“ in der Ausgabe.

tr -d 'a' < Datei.txt

„-d“ führt dazu dass alle „a“ gelöscht werden.

tr 'abcd'  'jklm' < Datei.txt

Wenn mehr als ein Zeichen angegeben wird , dann schreibt man die in Anführungszeichen. Hier werden der Reihe nach, alle Buchstaben im ersten Argument durch die Buchstaben im zweiten ersetzt.

Als Bereichs Kennzeichnung darf „-“ benutzt werden: „a-z“ meint alle Zeichen zwischen „a“ und „z“.

Spezielle Zeichen müssen mit „\“ escaped werden: „\n“, „\t“, „\\“ usw.

sed

Abkürzung für Stream Editor. Zwingend, wenn man mehr als ein Zeichen manipulieren möchte. Erlaubt Reguläre Ausdrücke.

sed 's/Hallo/hi/g' test.txt > changed.txt

Ersetz alle „Hallo“ in „test.txt“ nach „hi“ und schreibt das Ergebnis in die Datei „changed.txt“. Das „s“ vor dem ersten „/“ heist ’substitute‘ das „g“ nach dem letzten „/“ heist „globally“ und meint das alle in „test.txt“ vorkommenden „Hallo“ ersetz werden sollen. Wenn man das „g“ weglässt, wird jeweils nur das erste in einer Zeile vorkommende „Hallo“ ersetzt.

awk

Mächtig, Vorfahre von Perl. Wie sed für die Manipulation längerer Zeichenketten geeignet. Wichtigstes Merkmal: Arbeiten Zeilen und Spaltenorientiert. Das heist, eine Zeile wird aus der Eingabe bis „/n“ gelesen. Die Leerzeichen werden als Trenner zwischen den Spalten interpretiert. Die Spalten lassen sich mit „$n“ auslesen.

Advertisements