ubuntuusers.de

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:

Wiki/Icons/terminal.png 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:

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 auf memory_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 auf upload_max_filesize = 10240M gesetzt.

Diese Revision wurde am 26. Juli 2022 15:08 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell