Tipp: Der Stream-Editor sed

In den vorangegangenen Artikeln dieser Reihe haben wir mit openssh und openssl die Bereiche Zugriffssicherheit und Verschlüsselung behandelt. Hier geht es nun um einen der kleinen Helfer auf der Kommandozeile, das Progamm sed.

Die Manual Page (man 1 sed) bezeichnet den sed als Stream-EDitor zum Filtern und Transformieren von Text, womit das Einsatzgebiet genau beschrieben ist.

Einfaches Ersetzen von Text

Bevor wir einen Text bearbeiten, legen wir ihn als Datei an, um daran unsere Filter- und Transformationsoperationen auszuführen. Damit er nicht zu lang wird und wir die Ergebnisse der Ausgaben nicht immer kürzen müssen, benutzen wir den folgenden Inhalt für die Datei /tmp/datei.txt

Hello World,
welcome to SED, the Steam-EDitor (SED).
We hope you ENJOY this short tutorial.
Just try to filter and transform your own text files.

Natürlich enthält diese Datei ein paar kleine Fehler, die wir nun mit dem sed beheben.

sed wird nicht mit Großbuchstaben geschrieben, daher müssen wir SED gegen sed tauschen. Dafür gibt es den Befehl Substitute. Diejenigen, die schon mit Perl gearbeitet haben, werden dessen Aufbau schnell wiedererkennen.

s/quelle/ziel/

Dabei steht das s am Anfang des Ausdrucks für Substitute. Zwischen den Schrägstrichen stehen zunächst der ersetzende und dann der Ersatztext. Beginnen wir mit einem einfachen Beispiel:

user@linux ~ $ sed -e "s/SED/sed/" /tmp/datei.txt
Hello World,
welcome to sed, the Steam-EDitor (SED).
We hope you ENJOY this short tutorial.
Just try to filter and transform your own text files.

Wie gewünscht, hat sed die Quelle (SED) in das Ziel (sed) umgewandelt. Allerdings macht er das nur einmal pro Zeile, in der die Quelle gefunden wird. Gibt es mehrere Quellen, die in einer Zeile transformiert werden sollen, muss dies über den Modifizierer Global (g) angegeben sein, der an den Ausdruck angehängt wird.

user@linux ~ $ sed -e "s/SED/sed/g" /tmp/datei.txt
Hello World,
welcome to sed, the Steam-EDitor (sed).
We hope you ENJOY this short tutorial.
Just try to filter and transform your own text files.

Manchmal ist es sinnvoller, nur die wirklich geänderten Zeilen zu sehen, dann wird über den zusätzliche Modifizierer Print (p) nur die modifizierte Zeile ausgegeben. Darüber hinaus weisen wir sed über die Option -n (quiet) an, nur noch die Zeilen auszugeben, die über einen Print-Modifizierer ausgegeben werden sollen.

user@linux ~ $ sed -n -e "s/SED/sed/gp" /tmp/datei.txt
welcome to sed, the Steam-EDitor (sed).

Ein weiterer Modifizierer ist Insensitive (i). Mit ihm unterscheidet sed nicht mehr zwischen Klein- und Großbuchstaben. Damit funktioniert dann auch das folgende Beispiel.

user@linux ~ $ sed -n -e "s/SeD/sed/gpi" /tmp/datei.txt
welcome to sed, the Steam-EDitor (sed).

Es lassen sich auch mehrere Änderungen an einer Datei in einem sed-Aufruf durchführen. Dazu werden entweder mehrere Skripte über die Option -e angegeben oder innerhalb eines Skriptes die Aufrufe durch ein Semikolon (;) getrennt.

user@linux ~ $ sed -e "s/SED/sed/g ; s/Steam/Stream/ ; s/ENJOY/enjoy/" /tmp/datei.txt
Hello World,
welcome to sed, the Stream-EDitor (sed).
We hope you enjoy this short tutorial.
Just try to filter and transform your own text files.

Das Ziel einer Substitution muss nicht immer gefüllt sein. Ist es leer, wird der in der Quelle angegebene Text aus der Ausgabe entfernt. Im folgenden Beispiel wird das überflüssige ` (SED)` am Ende der zweiten Zeile entfernt.

user@linux ~ $ sed -e "s/ (SED)//" /tmp/datei.txt
Hello World,
welcome to SED, the Steam-EDitor.
We hope you ENJOY this short tutorial.
Just try to filter and transform your own text files.

Direktes Ändern der Datei

Bisher hat sed immer die Ergebnisse auf die Konsole ausgegeben. Da die Ergebnisse in der Datei erscheinen sollen, könnte man nun auf die Idee kommen, die Ausgabe in dieselbe Datei umzuleiten. Das funktioniert aber nicht, da die Umleitung zuerst von der aufrufenden Shell geöffnet wird und danach erst die Datei von sed. Das Resultat ist dann eine leere Datei.

Mit der Option -i (inplace) wird die Datei von sed ausgelesen und das Ergebnis in eine Datei gleichen Namens gespeichert.

Reguläre Ausdrücke

Auch die Arbeit mit Suchmustern ist möglich. Die Quelle der Suche ist ein regulärer Ausdruck (RegEx), der in unseren Beispielen bisher immer nur durch einzelne Buchstaben gebildet wurde.

Da reguläre Ausdrücke ein recht komplexes Thema sind, widmen wir ihnen den nächsten Teil dieser Artikelserie, um danach weitere Möglichkeiten des sed im Zusammenhang mit regulären Ausdrücken kennenzulernen.

Ein Gedanke zu „Tipp: Der Stream-Editor sed“

Kommentare sind geschlossen.