[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] '''sed''' (von '''s'''tream '''ed'''itor) ist ein nicht-interaktiver [:Editoren: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 = {{{#!vorlage Befehl sed [Optionen] sed-Skript [Textdatei...] }}} oder {{{#!vorlage Befehl 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:info-Seite] von sed oder über die Links am Ende des Artikels. sed-Skripte verwenden reguläre Ausdrücke ähnlich denen von [:Shell/grep#Regular-Expressions: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. || {{{#!vorlage Warnung 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: {{{#!code bash for x in *.sh; do [ -w $x ] && sed -i 's/Suchmuster/Ersetzungsmuster/' $x done }}} = Anwendungsbeispiele = == Ersetzen von Text in einer Datei == * {{{#!vorlage Befehl 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. * {{{#!vorlage Befehl 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 * {{{#!vorlage Befehl sed -n s/Anton/Berta/gp Textdatei }}}\ Ersetzt alle "Anton" durch "Berta" und gibt nur die betroffenen Zeilen aus. == Entfernen von Zeilen == {{{#!vorlage Befehl sed '/^#/d' Textdatei }}} Zeilen die mit `#` anfangen, werden entfernt. == Zeilen einfügen == * {{{#!vorlage Befehl sed '3iNeue Zeile' Textdatei }}}\ Vor der dritten Zeile wird "Neue Zeile" eingefügt. * {{{#!vorlage Befehl sed '4aNeue Zeile' Textdatei }}}\ Hier wird "Neue Zeile" nach der vierten Zeile eingefügt. * {{{#!vorlage Befehl sed '$aNeue Zeile' Textdatei }}}\ Hier wird "Neue Zeile" nach der letzten Zeile eingefügt. == Reguläre Ausdrücke == {{{#!vorlage Befehl sed 's/^E-Mail:.*$/E-Mail-Adresse ist privat/' Textdatei }}} Alle Zeilen, die mit "E-Mail:" anfangen, werden ersetzt. == Bearbeiten von Dateinamen == {{{#!vorlage Befehl 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\ {{{#!vorlage Befehl 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\ {{{#!vorlage Befehl 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. = Links = * [http://sed.sourceforge.net/ sed-Projektseite auf sourceforge] {en} * [http://sed.sourceforge.net/sed1line_de.html sed1line] {de} - Nützliche, einzeilige Skripte für sed * [http://sed.sourceforge.net/sedfaq.html sed FAQ] {en} * [http://sed.sourceforge.net/grabbag/scripts/ sed-Skripte] {en} - Einfache bis sehr komplizierte Beispiele * [wikipedia:Sed_(Unix):sed in der Wikipedia] * [http://www.tty1.net/sed-tutorium_de.html Das sed Tutorium] {de} - Eine sehr ausführliche Einführung #tag: Shell