cherezoff - stock.adobe.com

Ein Blick auf grundlegende sed-Befehle unter Linux

Administratoren kennen den Linux Stream Editor unter dem Befehl sed. Das Kommandozeilen-Tool lässt sich hervorragend in Skripten benutzen, um Textdateien zu manipulieren.

Es gibt viele Möglichkeiten, wie Linux-Administratoren Dateien modifizieren können, ohne das Original überschreiben zu müssen. Eines der effizientesten Tools ist der Stream Editor, auch als sed bekannt.

Der Stream Editor ist per Standard in den meisten Linux-Distributionen vorinstalliert. Damit können Sie Textdateien im Betriebssystem manipulieren und benutzen dafür unter Linux den Befehl sed.

Wie die meisten Linux-Anwendungen kann sed Eingaben verarbeiten, die via Pipe kommen. Dadurch ist es ein effizientes Tool für Skripte. Sie können es auch als einfaches Finden-und-Ersetzen-Werkzeug nehmen. Das folgende Beispiel zeigt, wie das funktioniert. Der Befehl sucht nach eins und ersetzt es mit zwei. Der Befehl wird mit einem /g abgeschlossen.

sed 's/eins/zwei/g' inputfile outputfile

Mit dem sed-Befehl können Sie unter Linux zum Beispiel eine Konfigurationsdatei finden und eine neue erstellen. Laufen die Funktionen als Skript, sind sie reproduzierbar und konsistent. Sie können damit schnell Änderungen durchführen.

Der hauptsächliche Zweck von sed ist es, die Inhalte von Textdateien schnell ändern zu können. Es benutzt ein einige wichtige Parameter, die Sie via Kommandozeile übergeben. Das /s bedeutet Suche und der Befehl wird mit /g abgeschlossen. Durch den Schalter -i führen Sie die Änderungen direkt an der Datei durch, es wird keine neue Version geschrieben.

sed -i 's/Port 22/Port 10000/g' /etc/ssh/sshd_config

In unserem Beispiel wird die Port-Nummer des SSH-Servers (Secure Shell) in der Datei etcssh/sshd_config vom Standard 22 auf 10000 gesetzt.

Dateiänderungen mit dem sed-Befehl unter Linux durchführen

Es ist möglich, Dateien direkt mit sed zu verändern, aber meist gilt das als unschöne Praxis. Ändern Sie direkt, kann das zu Problemen führen. Sed hat keinen Zugriff auf den kompletten Quellcode und kann deswegen keine Fehler oder Vertipper erkennen. Weiterhin gefährden Sie die Originaldatei, weil es keine Option für eine Rolle rückwärts gibt, sobald Sie den Code geändert haben.

Ein Beispiel für die Verwendung von sed zur Konfiguration der sshd_config-Datei.
Abbildung 1: Ein Beispiel für die Verwendung von sed zur Konfiguration der sshd_config-Datei.

Sie können den Schalter -e benutzen, um mehrere Änderungen auf einmal durchzuführen. Die Datei sshd_config macht es einfach, mehrere Zeilen zu ändern. Das folgende Skript sieht vielleicht komplex aus, aber das Betriebssystem gibt einfach mehrere sed-Befehle weiter, die durch ein -e separiert sind.

Bei der Datei sshd_config können Sie die Port-Nummer ändern, die Passwort-Authentifizierung deaktivieren und Authentifizierung via öffentlichen Schlüssel einrichten – und das alles in einem Schritt.

sed -i -e 's/Port 22/Port 10000/g' -e '
s/PermitRootLogin yes/PermitRootLogin no/g' -e '
s/PasswordAuthentication yes/PasswordAuthentication no/g' -e '
s/#PasswordAuthentication no/#PasswordAuthentication no/g' /etc/ssh/sshd_config

Die Funktionen für Suchen und Ersetzen befinden sich in einer neuen Zeile. Den Befehl mit \ zu unterbrechen funktioniert nicht, weil das von sed wie ein Sonderzeichen behandelt wird.

Eingabeaufforderungen in sed kombinieren

Sie können auch mehrere sed-Befehle unter Linux kombinieren, um den Ort einer Anwendung zu ändern. Modifizieren Sie die Pfade manuell, gibt es viele Fehlerquellen. Eine Automatisierung macht einem das Leben viel leichter.

Backslashes als Trennzeichen funktionieren in einigen der Skripte nicht, aber sed gestattet es, das Trennzeichen zu ändern. Nehmen wir an, Sie haben eine Log-Datei, die example.conf heißt und in der sich folgender Inhalt befindet:

logpath = /var/log/mylogfile.log

Wollen Sie den Pfad in /my/alternate/path/newlog.log ändern, können Sie | als Trennzeichen benutzen, weil / für Systempfade nicht funktioniert.

sed -i 's|/var/log/mylogfile.log|/my/alternate/path/newlog.log|g' example.conf

Vor und nach dem Ändern der Log-Dateiordner.
Abbildung 2: Vor und nach dem Ändern der Log-Dateiordner.

Dem Suchmuster ein ^#MyComment voranzustellen, ist eine weitere Möglichkeit, den sed-Befehl unter Linux zu benutzen. Damit suchen Sie nach Zeilen, die mit #MyComment anfangen. Sie können das auf der Ausgabeseite einsetzen und es erstellt eine neue Zeile, um die existierende zu ersetzen. Sie können weiterhin nach Inhalten suchen, die sich am Ende der Zeile befinden. Dazu benutzen Sie das Zeichen $.

Weitere Beispiele finden Sie in der Manpage von sed (man sed). Dort finden Sie eine genauere Aufschlüsselung des Befehls und der Syntax.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+, Xing und Facebook!

Nächste Schritte

80 wichtige Linux-Befehle

Richtig arbeiten mit der Linux-Kommandozeile

Linux-Kommandos für das Prozess-Management

Erfahren Sie mehr über Serverbetriebssysteme

ComputerWeekly.de
Close