sed und Reguläre Ausdrücke

sed

Sed ist ein Stream EDitor. Im Gegensatz zu einem normalen Editor, kannst du in sed eine Datei nicht öffnen um sie anschliessend zu bearbeiten. Du musst sed deine Anweisungen geben, bevor du deinen Befehl abschickst. sed geht dann Zeile für Zeile durch die Datei und führt deinen Befehl aus. Das Resultat wird auf der Standard-Ausgabe ausgegeben. Um das zu Speichern, musst du diese in eine Datei umleiten.

Ein paar Beispiele

Für die Beispiele kannst du deine eigenen Dateien aus der Unix-Einführung verwenden, oder besser die Beispiel-Datei herunterladen. In der Beispiel-Datei haben die Befehle sicher alle einen Effekt.

sed 's/an/na/g' fruechte.txt

ersetzt zum Beispiel in deiner Datei jedes Auftreten von an durch na. Das s zu Beginn des Befehls bedeutet, dass nun ein Ersetz-Befehl folgt (s von Suchen und Ersetzen). Das g am Ende verlangt "global", so dass nicht bloss der erste Treffer einer Zeile angepasst wird. Passe den Befehl an und schaue was du alles erreichen kannst.

sed 's/orange//' fruechte.txt

ersetzt jedes Auftreten von Orange mit nichts. Das löscht das Wort also.

Reguläre Ausdrücke

Die Beispiele oben sind zwar manchmal praktisch, gerade wenn du mehrere solcher Befehle mit | aneinander reihst. Wirklich mächtig wird das aber erst, wenn du Reguläre Ausdrücke verwendest. Reguläre Ausdrücke beschreiben die Struktur einer Zeichenkette. Diese Ausdrücke können zum Beispiel wie folgt aussehen

sed 's/g.//' fruechte.txt sed 's/b.*//' fruechte.txt sed 's/pf.*//' fruechte.txt sed 's/^pf.*//' fruechte.txt sed 's/.*e//' fruechte.txt sed 's/.*e$//' fruechte.txt sed 's/[an]*//g' fruechte.txt

Die vorkommenden Symbole haben folgende Bedeutungen

.ein beliebiges Zeichen
*beliebig oft wiederholt (das Zeichen direkt davor)
^der Beginn einer Zeile
$das Ende einer Zeile
[an]einer der Buchstaben zwischen [ und ]

Kontrolliere mit der Tabelle oben, ob die Beispiel-Befehle wirklich gemacht haben, was du erwartet hättest.

Komplexere Ausdrücke

Mit Regulären Ausdrücken sind noch viel komplexere Dinge möglich. Darauf können wir hier aber nicht eingehen. Im Internet findest du aber diverse Anleitungen zu Regulären Ausdrücken.

Wenn du in sed komplexere Ausdrücke verwenden möchtest, musst du die Option -r verwenden.

sed -r 's/[an]{2,}//g' fruechte.txt

Schliesslich noch ein sehr nützlicher Link für sed-Benutzer. sed1line ist eine grosse Sammlung von hilfreichen sed-Befehlen.

Tipp: Wir haben hier sed angeschaut. Reguläre Ausdrücke sind aber viel weiter verbreitet. Sie werden auch von grep oder den meisten Editoren verstanden. Oft kannst du deshalb auch einfach kate öffnen und dort die Suchen/Ersetzen-Funktion verwenden. Wenn du Reguläre Ausdrücke in die Shell kopierst, kann es sein, dass die Shell Mühe mit den Sonderzeichen hat. Melde dich in diesem Fall bei uns.