Aus LinuxUser 08/2015

Workshop: Einführung in den Stream-Editor Sed

© zefart, 123RF

Am Fließband

Mit Sed editieren Sie Textdaten ohne interaktive Benutzeroberfläche – auch in Pipes oder der Eingabeumlenkung. In einer einzigen Zeile lassen sich umfangreiche Editierkommandos absetzen.

Mit dem Stream-Editor Sed [1] bearbeiten Sie Textdateien ohne einen ausgewachsenen Editor. Seine Stärken spielt er insbesondere bei sich wiederholenden Bearbeitungsvorgängen aus, die sich mithilfe von Shell-Skripten automatisieren lassen. Mit regulären Ausdrücken (Englisch: „regular expressions“) steht dem Kommandozeileneditor ein mächtiges Werkzeug zur Seite. Hier übergeben Sie dem Editor eine Beschreibung der Beschaffenheit der zu bearbeitenden Zeichenkette, sodass dieser große Textbestände ohne Zutun automatisiert abarbeitet.

Programmaufruf

Sed nimmt von allen Ecken Kommandos und Daten entgegen: Sie hängen diese entweder an den Aufruf an oder lassen Sed die gewünschten Kommandos aus einer Datei auslesen. Die zu bearbeitenden Daten kommen entweder per Pipe, Eingabeumlenkung oder direkt aus einer Textdatei. Die Ausgabe erfolgt entweder auf auf die Standardausgabe STDOUT (also in der Regel den Bildschirm), per Pipe an den nächsten Befehl oder durch Ausgabeumlenkung in eine Zieldatei. Sed selbst überschreibt hingegen in den Ausgangsdaten nichts.

Listing 1 zeigt eine Reihe von allgemeinen Beispielen. In Zeile 1 liest Sed eine Textdatei ein und gibt das Ergebnis auf der Standardausgabe aus. Im Zeile 2 geschieht dasselbe, allerdings mit Eingabeumlenkung. Zeile 3 zeigt das Anhängen von Sed per Pipe an die Ausgabe eines Programms. In Zeile 4 liest Sed sämtliche Anweisungen aus einer eigens für ihn erstellten Skript-Datei; alternativ geben Sie Sed mehrere Kommandos mit (Zeile 5).

In einigen Fällen wirkt sich die Reihenfolge der Befehle auf das Ergebnis aus. Testen Sie in daher in jedem Fall die Skripte ausgiebig, bevor Sie sie der auf den Datenbestand loslassen. In den Zeilen 6 und 7 leitet Sed seine Ausgabe in eine Zieldatei weiter, wobei im letzten Beispiel auch etwaige Fehlermeldungen dort landen.

Listing 1

$ sed Kommando Textdatei
$ sed Kommando < Textdatei
$ Programm | sed Kommando | ...
$ sed -f Skript ...
$ sed -e Kommando1 -e Kommando2 ... -e KommandoN Textdatei
$ sed Kommando > Zieldatei
$ sed Kommando > Zieldatei 2>&1

Syntax

Sed benötigt für das Editorkommando immer eine oder mehrere Adressen, auf die er das Kommando anwendet, wobei die grundlegende Syntax folgendermaßen aussieht:

$ sed [-Optionen] [Adresse[, weitere Adressen]] [!] Kommando [Argumente]

Als Adressen dienen oft Zeilennummern, wobei $ für die letzte Zeile steht, oder auch reguläre Ausdrücke (/.../). Sed nimmt beliebig viele Adressen entgegen, sofern Sie dabei nicht die Übersicht verlieren. Soll Sed an allen Textstellen außer den adressierten Passagen aktiv werden, kehren Sie eine Adressierung mittels ! einfach um (Negierung). Die Optionen zu Sed und seinen Editierkommandos finden Sie im weiteren Verlauf des Beitrages.

Um mehrere Sed-Kommandos auf einem Rutsch auszuführen, nutzen Sie am besten Sed-Skripte. Diese bestehen aus genau einer Zeile pro Anweisung (Listing 2). Möchten Sie das Skript von der Kommandozeile direkt ausführen, geben Sie /bin/sed in der ersten Zeile als Interpreter-Anweisung („Shebang“) vor. Die Erste der zwei folgenden Anweisungen entfernt zuerst das Wort „Gans“. Genauer gesagt, tauscht die Anweisung das Wort gegen nichts aus. Die zweite Anwendung ersetzt bei jedem Vorkommen (Option g am Ende der Anweisung) den String „jo“ gegen „Jo“.

Listing 2

#!/bin/sed -f
s/Gans//
s/jo/Jo/g

Machen Sie das Skript ausführbar (etwa über chmod +x Skript), dann lässt es sich wie jedes andere Programm oder Skript direkt von der Kommandozeile aus – ohne das Sed-Kommando davor – aufrufen. Im Regelfall nehmen Sie von dieser Möglichkeit jedoch selten Gebrauch. Vielmehr bringen Sie sed und eventuelle Aufrufe von Skript-Dateien in einem Shell-Skript unter.

Beispieldaten

Für erste Übungen nutzen Sie die in Listing 3 dargestellte Telefonliste. Speichern Sie den Inhalt dieser Tabelle in textdatei.txt ab. Die Tabelle sieht bewusst etwas wüst und zusammengeflickt aus: Leerzeilen, Rechtschreibfehler und andere Makel verunzieren sie. Mit Sed lassen sich diese Fehler jedoch leicht korrigieren – eine große Arbeitserleichterung, besonders dann, wenn es eine Datenbank mit mehreren Tausend Einträgen zu pflegen gilt. Die zweite Spielwiese in Listing 4 beinhaltet eine Liste mit grob unterschiedlich geschriebene Datumsangaben. Auch diese normiert Sed im Handumdrehen. Speichern Sie den Inhalt für den weiteren Gebrauch unter testliste.txt ab.

Listing 3

johann johannson  0885465468798746
Klaus Schraube  08755466584
Hans Michael  0987654321
Jochen Hansen  0405458765143321
Gabi Gans Meier   0548/9988776655
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
KAUFEN
LinuxUser 08/2015 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: