sed
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
sed (von stream editor) ist ein nicht-interaktiver Texteditor für die Verwendung auf der Kommandozeile oder in Skripten. sed zählt zu den "Urgesteinen" in der Unix- / Linux-Welt und ist quasi in jeder Linux-Installation (auch Minimalinstallationen) enthalten.
Verwandte Befehle sind:
grep: Durchsuchen und Filtern von Texten
awk: Auswertung und Bearbeitung von Textdaten
cut: Spaltenweise Manipulation von Textdaten
Installation¶
Das Programm sed ist im essentiellen Paket
sed
von Ubuntu enthalten und ist deshalb auf jedem System installiert.
Aufruf von sed¶
sed [Optionen] sed-Skript [Textdatei...]
oder
sed [Optionen] [-e sed-Skript | -f Skriptdatei] [Textdatei...]
Das Ergebnis wird auf der Standardausgabe ausgegeben. Wird keine Datei angegeben, so wird die Standardeingabe verwendet.
Die Syntax von sed-Skripten findet man in der info-Seite von sed oder über die Links am Ende des Artikels. sed-Skripte verwenden reguläre Ausdrücke ähnlich denen von grep. Es ist empfehlenswert, sed-Skripte durch Hochkommas ('
) zu schützen, damit die Shell Sonderzeichen nicht selbst auswertet.
Parameter¶
Diese Parameterliste ist unvollständig. Weiteres findet sich auf der man- oder info-Seite von sed.
Kurzform | Langform | Beschreibung |
-n | --quiet , --silent | Verhindert das automatische Ausgeben des Ergebnisses. Ausgaben erfolgen nur über das Kommando p . |
-e Skript | --expression=Skript | Angeben eines sed-Skriptes, mehrere sed-Skripte sind möglich. Bei nur einem sed-Skript kann -e weggelassen werden. |
-f Skriptdatei | --file=Skriptdatei | Das sed-Skript steht in der Skriptdatei, nicht auf der Kommandozeile. |
-i | --in-place | Die Textdatei wird verändert, anstatt das Ergebnis auf Standardausgabe auszugeben. |
Achtung!
Bei der Verwendung des Parameters -i sollte man wissen, dass das Überschreiben der gewählten Dateien durch Entzug von Schreibrechten nicht verhindert wird.
Wenn man also Platzhalter verwendet und sichergehen will, dass schreibgeschützte Dateien nicht verändert werden, dann sollte man diesen Parameter in Kombination mit test in einer for-Schleife verwenden:
1 2 3 | for x in *.sh; do [ -w $x ] && sed -i 's/Suchmuster/Ersetzungsmuster/' $x done |
Anwendungsbeispiele¶
Ersetzen von Text in einer Datei¶
sed s/Anton/Berta/g Textdatei
Jedes Auftreten von "Anton" wird durch "Berta" ersetzt (aber auch "Antonius" wird zu "Bertaius"). Wird
g
(global) weggelassen, wird nur das erste Auftreten in einer Zeile ersetzt.sed /Name/s/\bAnton\b/Berta/g Textdatei
Alle Wörter "Anton" werden durch "Berta" ersetzt (nicht "Antonius"), aber nur in Zeilen, die "Name" enthalten
sed -n s/Anton/Berta/gp Textdatei
Ersetzt alle "Anton" durch "Berta" und gibt nur die betroffenen Zeilen aus.
Entfernen von Zeilen¶
sed '/^#/d' Textdatei
Zeilen die mit #
anfangen, werden entfernt.
Zeilen einfügen¶
sed '3iNeue Zeile' Textdatei
Vor der dritten Zeile wird "Neue Zeile" eingefügt.
sed '4aNeue Zeile' Textdatei
Hier wird "Neue Zeile" nach der vierten Zeile eingefügt.
sed '$aNeue Zeile' Textdatei
Hier wird "Neue Zeile" nach der letzten Zeile eingefügt.
Reguläre Ausdrücke¶
sed 's/^E-Mail:.*$/E-Mail-Adresse ist privat/' Textdatei
Alle Zeilen, die mit "E-Mail:" anfangen, werden ersetzt.
Bearbeiten von Dateinamen¶
sed 's!/home/anton/!/home/berta/!' Textdatei
Normalerweise wird "/" als Trennzeichen verwendet. Es lässt sich aber beliebig austauschen, was beim Bearbeiten von Dateinamen nützlich ist.
Direktes Bearbeiten einer Datei¶
Bearbeiten von PHP Einstellungen (memory_limit) z.B. php.ini
sed -i "s/memory_limit = .*M/memory_limit = 2048M/" /etc/php/7.2/apache2/php.ini
Hier wird der
memory_limit
von dem Standard-Wert aufmemory_limit = 2048M
gesetzt.Bearbeiten von PHP Einstellungen (upload_max_filesize) z.B. php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/7.2/apache2/php.ini
Hier wird der
memory_limit
von dem Standard-Wert aufupload_max_filesize = 10240M
gesetzt.
Links¶
sed-Projektseite auf sourceforge 🇬🇧
sed1line 🇩🇪 - Nützliche, einzeilige Skripte für sed
sed FAQ 🇬🇧
sed-Skripte 🇬🇧 - Einfache bis sehr komplizierte Beispiele
Das sed Tutorium 🇩🇪 - Eine sehr ausführliche Einführung