26. Januar 2020

Sed – Der Stream-Editor auf dem Terminal unter Linux

Informationen:

Der Standard-Windows-Nutzer will mit dem Terminal meist nichts zu tun haben, bezeichnet dieses als veraltetes Werkzeug aus grauer Computer-Vorzeit. Nun, im Grunde muss man damit auch unter Linux nicht arbeiten – aber man kann. Und wenn man damit erst einmal seine Erfahrungen gemacht hat sieht man oft das sich damit viele Dinge viel schneller und einfacher erledigen lassen als mit jeder grafischen Software egal ob unter Windows oder Linux.

In diesem Beitrag der Linux Bibel werden wir nun den Stream-Editor Sed kennen lernen, er hat keine grafische Oberfläche wie etwa Nano – er wird einfach über Befehle gesteuert, kann mit Scripts automatisiert arbeiten und kann mehrere Dateien zur selben Zeit bearbeiten.

Sed nutzen

Die Software ist automatisch installiert, eine Installation ist also nicht nötig, je nachdem welche Dateien man bearbeitet – also System-Dateien oder solche die einem selbst gehören muss man mit administrativen Rechten arbeiten oder auch nicht.

Die grundlegende Syntax der Software lautet nun:

sed Optionen 'Befehle' Dateien

Wollen wir uns nun einfach einmal den Inhalt von Textdateien anzeigen lassen, dazu nutzen wir die den Befehl “p“, als Textdatei nehme ich die im Home-Verzeichnis versteckt liegende Datei “.bashrc“:

sed 'p' .bashrc
Sed – Der Stream-Editor auf dem Terminal unter Linux

Nun könnten wir uns auch nur die zweite Zeile anzeigen zu lassen nutzen wir zusätzlich die Option “-n” und geben die Zeile an:

sed -n '2p' .bashrc
Sed – Der Stream-Editor auf dem Terminal unter Linux

Nun wollen wir etwa die zehnte Zeile löschen, hierzu nutzen wir den Befehl “d“:

sed '10d' .bashrc

Oder wir wollen die Zeilen vier bis zehn löschen:

sed '4,10d' .basrc

Oder wir könnten auch jede Xte Zeile löschen, also beispielsweise jede dritte Zeile ab der achten Zeile (dies funktioniert jedoch nur unter auf Debian basierenden Systemen und muss nicht unter anderen Distributionen laufen):

sed '8~3d' .bashrc

Um jede Zeile nach der elften zulöschen nutzen wir das Dollar-Zeichen:

sed '11,$d' .bashrc

Auch mit regulären Ausdrücken (darüber werden wir in einem bald entstehenden Artikel mehr erfahren) kann man mit Sed Zeilen löschen. Nehmen wir beispielsweise einmal Konfigurationsdateien – die meisten enthalten Beschreibungen die mit einem “#” auskommentiert werden damit die Software diese nicht ausliest, wollen wir nun also einmal alle Zeilen löschen die mit einer Raute beginnen:

sed '/^#/d' .bashrc

Wir können reguläre Ausdrücke natürlich auch nutzen um uns die reine Konfigurationsdatei anzusehen ohne die auskommentierten Hilfen – wir lassen uns nun alle Zeilen anzeigen die nicht mit einer Raute beginnen, wichtig ist wie oben schon beschrieben – reguläre Ausdrücke werden in einen Slash gesetzt:

sed -n '/^[^#]/p' .bashrc

Jetzt wollen wir etwa die ersten fünf Zeilen aus der Datei “.bashrc” in die noch nicht existierende Datei “.bashrc-Backup” schreiben, dazu nutzen wir den Befehl “w“:

sed '1,5w .bashrc-Backup' .bashrc

Wir können auch etwas aus der Datei “datei.txt” in die bestehende Datei “.bashrc” einfügen, wir wollen beispielsweise den Inhalt der ersten Datei in die zweite Datei – dort ab der fünften Zeile einfügen, dazu nutzen wir den Befehl “r“:

sed '5r datei.txt' .bashrc

Nun wollen wir ganz einfach Sed mal nach dem Wort “Katka” suchen lassen und dieses durch “Katharina” ersetzen lassen, gleich einmal in allen HTML-Dateien im aktuellen Verzeichnis:

sed 's/Katka/Katharina/g' *.html

Mit dem Befehl “s” gibt man also den Ausdruck an der gesucht werden soll und mit “g” den Ausdruck der statt dessen eingesetzt werden soll. Hier fungiert der Slash “/” als Trenner, dieser ist etwa in HTML-Dateien natürlich nicht sonderlich angebracht – als Trenner kann man jedes Zeichen angeben, etwa auch die Raute. In diesem Beispiel gehen wir etwas anders vor:

for i in *.html; do sed -i.bak 's#http://www.linux-bibel.oesterreich.com#https://www.linux-bibel-oesterreich.at#g' $i; done

Wir können natürlich auch mehrere Befehle kombinieren um alles mögliche in einem einzigen Befehl unterzubringen, dazu gibt es zwei Möglichkeiten – wir können vor jedem Befehl ein “-e” voran setzen oder beide Befehle in einer geschweiften Klammer angeben und diese durch das Semikolon “;” trennen:

sed -e '4,$d' -e 's/Windows/Linux/g' Dateiname.txt
sed '{4,$d;s/Windows/Linux/g}' Dateiname.txt

Befehle für Sed kann man natürlich auch in Scripte schreiben die man dann mit der Option “-f” ausführt, beispielsweise das Script “script.sh“:

sed -f script.sh Dateiname.txt

Weitere Hilfen und Beispiele zeigt natürlich wie üblich die Manpage der Software mit dem Befehl:

man sed

Hier noch einmal die wichtigsten Befehle:

BefehlWirkung
pGibt den angegebenen Bereich einer Datei aus, zeigt diesen an
dLöscht den angegebenen Bereich aus einer Datei
sErsetzt gesuchte Muster durch angegebene
aFügt angegebenen Text nach der angegebenen Stelle ein
iFügt angegebenen Text vor der angegebenen Stelle ein
cErsetzt angegebene Bereiche, nur in Scripts möglich
rLiest den angegebenen Bereich ein und setzt diesen an einem anderen Ort wieder ein
wSpeichert den angegebenen Bereich in eine Datei

140 total views, 2 views today

Creative Commons License Attribution-NonCommercial-ShareAlikeRepublish
Avatar

Robert Goedl

Linux-User seit dem Jahr 2000, Debian ist die von mir genutzte Distribution (Sid Unstable) Lebe in Graz, der Hauptstadt der Steiermark in Österreich

Alle Beiträge ansehen von Robert Goedl →

3 Gedanken zu “Sed – Der Stream-Editor auf dem Terminal unter Linux

  1. Ich stimme dir vollkommen zu, das mit dem beschäftigen.
    Der Widerstand in mir ist,
    die Gewohnheit.
    Erahnen was da möglich sein könnte, ist unscharf da…

  2. Sed

    Ich bin begeistert, und zugleich erschüttert was solch ein Wort bewirken kann. Ich habe einige der Eingaben eingetippt, und rasch ist die Ausgabe.
    Dafür brauchts den (ich) Dolphin nicht. Und die Lernkurve mit dem Terminal ist für mich sehr langsam gewachsen, weil der grafische Modus (Gewohnheit) normal ist.

    1. Ja das Terminal ist immer wieder überraschend, wenn man sich mal ein wenig damit beschäftigt. Eigentlich braucht man gar keine grafische Oberfläche 😉

      Sed ist gerade mit Awk unschlagbar (kommt auch bald), mit beiden kann man Dinge in Sekunden machen für die man auf der GUI viele Minuten brauchen würde

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

×

Weitergabe und Weiterverbreitung

Sie möchten Inhalt der Linux Bibel auf Ihrer Webseite weiter verbreiten oder in anderer Hinsicht veröffentlichen - dies ist möglich, es gilt jedoch die bestehende Lizenz der Inhalte der Linux Bibel zu beachten.

Sie haben weitere Fragen robert.goedl76@gmail.com

License

Creative Commons License Attribution-NonCommercial-ShareAlikeCreative Commons Attribution-NonCommercial-ShareAlike
Sed – Der Stream-Editor auf dem Terminal unter Linux