Zum Inhalt springen

Sed: Unterschied zwischen den Versionen

Aus Foxwiki
 
(85 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{DISPLAYTITLE:sed}}
'''sed''' - '''S'''trom'''ed'''itor zum Filtern und Umwandeln von Text
'''sed''' - strom-orientierter Editor zur Bearbeitung von Dateien anhand von Regeln


== Beschreibung ==
== Beschreibung ==
* Da es ein "nicht-interaktives" Programm ist, kann es, falls gewünscht, zur Automatisierung der Bearbeitung verwendet werden.  
[[Unix]]-Werkzeug, mit dem Text-[[Datenstrom|Datenströme]] bearbeitet werden können. Der Datenstrom kann auch aus einer Datei gelesen werden. Im Gegensatz zu einem [[Texteditor]] wird die Ursprungsdatei aber nicht verändert.
* Der Name sed ist eine Abkürzung für stream editor, und das Dienstprogramm leitet viele seiner Befehle vom ed line-editor ab (ed war der erste UNIX-Texteditor).
* So können Sie mehrere Dateien bearbeiten oder gängige Bearbeitungsvorgänge durchführen, ohne jemals vi oder emacs öffnen zu müssen.
* sed liest aus einer Datei oder von der Standardeingabe und gibt auf der Standardausgabe aus.  
* sed hat zwei Puffer, die Musterpuffer und Haltepuffer genannt werden.
* Beide sind anfangs leer.


=== So funktioniert's ===
Im Gegensatz zu einem interaktiven Texteditor, wie etwa dem [[vi]], wird <code>sed</code> mittels eines [[Skriptsprache|Skripts]] gesteuert.
* Geben Sie den Musterpuffer auf stdout aus.
* Der Stream-Editor ist kein herkömmlicher Editor wie Vi oder Emacs.
* Sed arbeitet nicht interaktiv, sondern wird über Kommandozeilenoptionen oder ein Skript gesteuert.
* Sed verändert nicht das Original, sondern schreibt das Ergebnis auf die Standardausgabe.
* Sed lädt die aktuell betrachtete Zeile in einen temporären Puffer - im Folgenden als Arbeitspuffer bezeichnet.  


==== Unix Sed Arbeitsmethodik ====
Der <code>sed</code>-Befehlssatz orientiert sich an jenem des [[Zeilenorientierter Editor|zeilenorientierten Texteditors]] [[Ed (Texteditor)|ed]]. Dabei werden für die Text-Durchmusterung laut der [[Portable Operating System Interface|POSIX]]-Spezifikation eine bestimmte Abart der [[Regulärer Ausdruck|Regular Expressions]], sogenannte (POSIX-) ''Basic Regular Expressions'' (BRE) verwendet.<ref>{{Internetquelle |url=http://pubs.opengroup.org/onlinepubs/009695399/utilities/sed.html#tag_04_126_13_02 |titel=sed-Spezifikation der Open Group |sprache=en |zugriff=2013-03-27}}</ref> Die [[GNU]]-Implementation verwendet allerdings ''GNU-BRE''s, die von ''POSIX-BRE''s geringfügig abweichen.
Dies wird als ein Ausführungszyklus bezeichnet.  
* Der Zyklus wird fortgesetzt, bis das Ende der Datei/Eingabe erreicht ist # Lesen einer ganzen Zeile aus stdin/file.  
# Entfernt alle nachstehenden Zeilenumbrüche.  
# Legt die Zeile in seinen Musterpuffer.
# Ändert den Musterpuffer entsprechend den übergebenen Befehlen.  


== Installation ==
Auch wenn der Sprachumfang von <code>sed</code> ziemlich limitiert und spezialisiert erscheint, so handelt es sich doch um eine [[Turing-Vollständigkeit|Turing-vollständige]] Sprache. Beweisen kann man die Turing-Vollständigkeit, indem man eine [[Turingmaschine]] mittels <code>sed</code> programmiert<ref>{{Internetquelle |url=http://www.catonmat.net/ftp/sed/turing.txt |titel=Implementation of a Turing Machine as Sed Script |sprache=en |zugriff=2013-03-23}}</ref><ref>{{Internetquelle |url=http://www.stunet.tu-freiberg.de/~bahmann/turing-sed/ |titel=Turing-Maschine mit ''sed'' |sprache=de |zugriff=2013-03-17}}</ref> oder indem man mit ''sed'' einen Interpreter für eine andere, Turing-vollständige Sprache schreibt.<ref>{{Webarchiv|url=http://mi.eng.cam.ac.uk/~er258/code/sed/ |wayback=20100418131328 |text=cam.ac.uk}}</ref>
== Syntax ==
=== Optionen ===
=== Parameter ===
=== Umgebungsvariablen ===
=== Exit-Status ===
== Anwendungen ==
=== Fehlerbehebung ===
== Konfiguration ==
=== Dateien ===
== Sicherheit ==


== Siehe auch ==
Folglich konnten und wurden sogar Spiele wie [[Sokoban]] oder [[Arkanoid]] und andere anspruchsvolle Programme wie [[Debugger]] mit sed geschrieben.<ref>{{Internetquelle |url=http://sed.sourceforge.net/grabbag/scripts/#misc |titel=Liste verschiedener sed-Skripte |sprache=en |zugriff=2011-11-19}}</ref>
=== Unterseiten ===
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
=== Dokumentation ===
# https://www.gnu.org/software/sed/manual/sed.html
==== RFC ====
==== Man-Pages ====
==== Info-Pages ====
=== Links ===
==== Einzelnachweise ====
<references />
==== Projekt ====
==== Weblinks ====


== Testfragen ==
; Sed ist ein Stromeditor (stream editor)
<div class="toccolours mw-collapsible mw-collapsed">
* Ein Stromeditor wird für grundlegende Texttransformationen auf einen Eingabestrom (einer Datei oder aus einer Verarbeitungskette) verwandt.
''Testfrage 1''
* Obwohl in einigen Aspekten ähnlich zu einem Editor, der Bearbeitungen nach Skript erlaubt (wie Ed), führt Sed nur einen Durchlauf über die Eingabe(n) durch und ist somit effizienter.
<div class="mw-collapsible-content">'''Antwort1'''</div>
* Allerdings ist es die Fähigkeit von Sed, Text in einer Verarbeitungskette zu filtern, die ihn besonders gegenüber anderen Arten von Editoren auszeichnet.
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>


= TMP =
* Da es ein "nicht-interaktives" Programm ist, kann es, falls gewünscht, zur Automatisierung der Bearbeitung verwendet werden.
=== Aufruf ===
* Der Name sed ist eine Abkürzung für stream editor, und das Dienstprogramm leitet viele seiner Befehle vom ed line-editor ab (ed war der erste UNIX-Texteditor).
[[Sed/Aufruf]]
* So können Sie mehrere Dateien bearbeiten oder gängige Bearbeitungsvorgänge durchführen, ohne jemals vi oder emacs öffnen zu müssen.
* sed liest aus einer Datei oder von der Standardeingabe und gibt auf der Standardausgabe aus.
* sed hat zwei Puffer, die Musterpuffer und Haltepuffer genannt werden.
* Beide sind anfangs leer.


=== Dateiübergabe ===
; Funktionsweise
[[Sed/Dateiübergabe]]
* Geben Sie den Musterpuffer auf stdout aus.
* Der Stream-Editor ist kein herkömmlicher Editor wie Vi oder Emacs.
* Sed arbeitet nicht interaktiv, sondern wird über Kommandozeilenoptionen oder ein Skript gesteuert.
* Sed verändert nicht das Original, sondern schreibt das Ergebnis auf die Standardausgabe.
* Sed lädt die aktuell betrachtete Zeile in einen temporären Puffer - im Folgenden als Arbeitspuffer bezeichnet.


=== Ausgabe ===
==== Arbeitsmethodik ====
[[Sed/Ausgabe]]
; Ausführungszyklus
* Der Zyklus wird fortgesetzt, bis das Ende der Datei/Eingabe erreicht ist # Lesen einer ganzen Zeile aus stdin/file
# Entfernt alle nachstehenden Zeilenumbrüche
# Legt die Zeile in seinen Musterpuffer
# Ändert den Musterpuffer entsprechend den übergebenen Befehlen


=== Kommandoübersicht ===
==== Reguläre Ausdrücke ====
[[Sed/Kommandos]]
; POSIX.2-BREs sollten unterstützt werden
* Dies erfolgt allerdings aus Leistungsgründen nicht vollständig.
* Die Sequenz \n in einem regulären Ausdruck passt auf das Zeilenumbruchzeichen und ähnliches gilt für \a, \t und andere Sequenzen.
* Die Option -E schaltet auf die Verwendung von erweiterten regulären Ausdrücken um; sie wurde seit Jahren in GNU Sed unterstützt und ist jetzt in POSIX enthalten.


=== Substitutionen ===
== Installation ==
[[Sed/Substitutionen]]
# '''apt install sed'''


=== Reguläre Ausdrücke ===
== Aufruf ==
[[Sed/Regular Expressions]]
$ '''sed''' [-V] [--version] [--help] [-n] [--quiet] [--silent]
[-l N] [--line-length=N] [-u] [--unbuffered]
[-E] [-r] [--regexp-extended]
[-e Skript] [--expression=script]
[-f Skriptdatei] [--file=Skriptdatei]
[script-if-no-other-script]
[Datei …]


=== Beispieltexte ===
=== Optionen ===
[[Sed/Beispieltext]]
{| class="wikitable sortable options"
 
|-
=== Anweisungen ===
! Unix !! GNU !! Beschreibung
[[Sed/Anweisungen]]
|-
 
| -n || --quiet, --silent || unterdrückt die Ausgabe des Musterbereichs
== Zeilen ausgeben ==
|-
[[Sed/Zeilen ausgeben]]
| || --debug || Kommentiert die Programmausführung
 
|-
== Adressierung ==
| -e Skript || --expression=Skript || Fügt das Skript zu den auszuführenden Befehlen hinzu
[[Sed/Adressierung]]
|-
 
| -f Skriptdatei || --file=Skriptdatei || Fügt den Inhalt der Skriptdatei zu den auszuführenden Befehlen hinzu
== Zeilen löschen ==
|-
[[Sed/Zeilen löschen]]
| || --follow-symlinks || Symbolischen Links bei der Bearbeitung an Ort und Stelle folgen
 
|-
== Suchen und Ersetzen ==
| -i[ENDUNG] || --in-place[=ENDUNG] || Dateien an Ort und Stelle bearbeiten (erstellt Sicherung, falls ENDUNG angegeben)
[[Sed/Suchen und Ersetzen]]
|-
 
| -l N || --line-length=N || Gibt die gewünschte Zeilenumbruchlänge für den Befehl »l« an
== Mehrere Kommandos [-e] ==
|-
[[Sed/Mehrere Kommandos]]
| || --posix || Deaktiviert alle GNU-Erweiterungen
 
|-
== Einfügen [i|a] ==
| -E, -r || --regexp-extended || Verwendet erweiterte reguläre Ausdrücke in dem Skript (für Portabilität verwenden Sie POSIX -E)
[[Sed/Einfügen]]
|-
 
| -s || --separate || Betrachtet Dateien getrennt statt als einzigen, kontinuierlichen langen Strom
== Einfügen aus einer Datei [r] ==
[[Sed/Einfügen aus einer Datei]]
 
== Schreiben in eine Datei [w] ==
[[Sed/Schreiben in eine Datei]]
 
== Dateien direkt bearbeiten ==
[[Sed/Dateien direkt bearbeiten]]
 
== Dateien ergänzen ==
[[Sed/Dateien ergänzen]]
 
== Nächste Zeile beabeiten[n] ==
[[Sed/Nächste Zeile beabeiten]]
 
== Zeichen tauschen [y] ==
[[Sed/Zeichen tauschen]]
 
== Sed vorzeitig beenden [q] ==
Manchmal ist es sinnvoll, den Stream Editor vorzeitig zu beenden:
 
'''sed '3q' test.txt'''
  1 Der Aufruf des Stream Editors besitzt immer das Format:
  2
  3 sed 'Kommando' Dateiname
 
'''sed -n '/sed/{p;q;}' test.txt'''
  3 sed 'Kommando' Dateiname
 
== Zeilentausch [h|g|G|x ] ==
* Die aktuell bearbeitete Zeile hält der Sed in einem Zwischenspeicher und bearbeitet sie in diesem »Pattern Space«.
* Hat der Editor seine Arbeit beendet, gibt er die Zeile aus und lädt die folgende Zeile der Eingabedatei in den Zwischenspeicher.
 
{|class="wikitable"
|-
|-
! align=center | h
| || --sandbox || Arbeitet im »Sandbox«-Modus (deaktiviert e/r/w-Befehle)
! | Mit dem Kommando »h« kann der aktuelle Zwischenspeicher in einen Puffer gesichert werden (»holding buffer«).
|-
|-
| align=center | '''G'''
| -u || --unbuffered || Lädt minimale Datenmenge aus den Eingabedateien und schreibt die Ausgabepuffer öfter
| | Das Kommando »G« fügt den Inhalt dieses Sicherungspuffers '''hinter '''der aktuell bearbeiteten Zeile ein.
|-
|-
| align=center | '''g'''
| -z || --null-data || Zeilen durch NUL-Zeichen trennen
| | »g« '''ersetzt '''die aktuelle Zeile durch den Inhalt des Sicherungspuffers.
|-
|-
| align=center | '''x'''
| || --help || zeigt Hilfeinformationen an und beendet das Programm
| | Den Inhalt der beiden Puffer '''vertauscht '''das Kommando »x«.
|-
|-
| || --version || gibt Versionsinformationen aus und beendet das Programm
|}
|}


==== Beispiel 1 ====
=== Befehle ===
'''sed -e '/sed/{h;d;}' -e '4G' -e '4q' test.txt'''
[[Sed/Befehle]]
  1 Der Aufruf des Stream Editors besitzt immer das Format:
 
  2
=== Rückgabewert ===
  4
  3 sed 'Kommando' Dateiname
'''sed -e '/sed/{h;d;}' -e '4g' -e '5q' test.txt'''
  1 Der Aufruf des Stream Editors besitzt immer das Format:
  2
  3 sed 'Kommando' Dateiname
  5 Dabei kann dem Kommando mitgeteilt werden, welche Zeilen der


===== Erklärung =====
== Anwendungen ==
* Das erste Kommando »-e '/sed/{h;d;}'« in teilt dem Editor mit, die Zeile, die sed enthält, zuerst in den Zwischenspeicher zu sichern und nachfolgend zu löschen.
=== Arbeitsweise ===
* Das zweite Kommando vollzieht das Einfügen des Inhalts des Puffers. »-e '4G'« fügt nach der 4.Zeile ein (Achtung: die gelöschte Zeile wird mitgezählt!)»-e '4g'« ersetzt die 4.Zeile.
<code>sed</code> kann sowohl innerhalb einer [[Pipe (Informatik)|Pipeline]] als auch auf [[Datei]]en arbeiten. Ausgaben erfolgen grundsätzlich auf <code><stdout></code>, Fehlermeldungen auf <code><stderr></code>. Der typische Aufruf sieht deshalb so aus:
* Das letzte Kommando »-e '4q'« beendet die Arbeit des Editors nach der 4.
* Zeile.  


==== Beispiel 2 ====
:{|
  '''sed -e '/Aufruf/h' -e '/Angabe/x' -e '$G' test.txt'''
|
  1 Der Aufruf des Stream Editors besitzt immer das Format:
  sed &apos;Anweisung1
  2
      Anweisung2
  3 sed 'Kommando' Dateiname
      …
  4
      Anweisung''N''&apos; Eingabedatei > Ausgabedatei
  5 Dabei kann dem Kommando mitgeteilt werden, welche Zeilen der
''&lt;stream>'' | sed &apos;Anweisung1
  6 Eingabedatei es bearbeiten soll.
                Anweisung2
* Als Adressierung kommen folgende
                …
  7 Mechanismen in Frage:
                Anweisung''N''&apos; | ''<stream>''
  8
|}
  1 Der Aufruf des Stream Editors besitzt immer das Format:
  10 Nummer Genau diese Zeile
  11 Start, Ende Alle Zeilen von "Start" bis "Ende"
  12 $ Symbolisiert die letzte Zeile
  13 RegEx Zeilen, die den Regulären Ausdruck enthalten
  14 1, RegEx Von Zeile 1 bis zur ersten Zeile, die RegEx enthält
  9 Keine Angabe Alle Zeilen


===== Erklärung =====
<code>sed</code> liest eine Eingabedatei (oder einen <code>input stream</code> auf <code><stdin></code>) zeilenweise ein. Diese Eingangsdaten landen zunächst im sogenannten '''Pattern Space'''. Auf diesem Pattern Space wird nacheinander jede Anweisung des vorgegebenen Programmes ausgeführt. Jede dieser Anweisungen kann dabei den Pattern Space verändern, folgende Anweisungen werden dann auf dem jeweiligen Ergebnis der letzten Anweisung ausgeführt. Führt eine dieser Veränderungen zu einem Nulltext, so wird die Verarbeitung an dieser Stelle abgebrochen und die Anweisungsliste mit der nächsten Eingabezeile wieder von vorne begonnen. Ansonsten wird das Ergebnis der letzten Anweisung auf <code><stdout></code> ausgegeben und die Anweisungsliste ebenfalls mit der nächsten Eingabezeile wieder begonnen.
* Enthält eine Zeile das Muster »Aufruf«, wird sie im Zwischenpuffer abgelegt.  
* Steht in einer Zeile »Angabe«, so wird diese Zeile mit dem Inhalt des Zwischenpuffers vertauscht.  
* Der Inhalt des Zwischenpuffers wird hinter der letzten Zeile eingefügt.  


== Sed-Skripte ==
== Siehe auch ==
Kompliziertere und häufig benötigte Sed-Aufrufe schreibt man besser in eine Datei.  
# [[awk]](1)
* Der Aufruf von Sed sieht dann wie folgt aus:  
# [[ed]](1)
sed -f <Skript_Datei> <zu_bearbeitende_Datei>
# [[grep]](1)
# [[tr]](1)
# [[perlre]](1)
# sed.info
# Sed-FAQ http://sed.sf.net/grabbag/tutorials/sedfaq.txt
# http://sed.sf.net/grabbag/


Beim Schreiben eines Skripts gelten folgende Regeln: * Beginnt eine Zeile mit einem Doppelkreuz #, so handelt es sich um einen Kommentar
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
* Vor und nach einem Kommando dürfen keine Leerzeichen, Tabulatoren...
* stehen
* Mehrere Kommandos auf einer Zeile, sind sie durch Semikola voneinander zu trennen


Der Stream Editor wird das gesamte Skript auf jede Zeile der Eingabedatei anwenden.  
=== Dokumentation ===
# https://www.gnu.org/software/sed/manual/sed.html


Als Beispiel dient ein Skript, dass alle deutschen Umlaute in der Eingabedatei umschreibt.
==== Man-Page ====
'''cat umlaut'''
* {{man|1|sed|posix|stream editor}}
  ## Ersetzen Umlaute
* {{man|1|sed|bsd|stream editor}}
  s/ä/\ae/g
* {{man|1|sed|gnu|Stromeditor zum Filtern und Umwandeln von Text}}
  s/ü/\ue/g
  s/ö/\oe/g
  s/Ä/\ae/g
  s/Ü/\Ue/g
  s/Ö/\Oe/g
  s/ß/\ss/g


Das Anwendungsbeispiel demonstriert die Möglichkeit der Kopplung von Kommandozeilenbefehlen und einem Skript:
==== Info-Pages ====
  '''sed -e '1,12d' -f umlaut test.txt'''
  $ info sed
  13 RegEx Zeilen, die den Regulären Ausdruck enthalten
  14 1, RegEx Von Zeile 1 bis zur ersten Zeile, die RegEx enthält


[[Kategorie:Linux/Befehl]]
=== Links ===
[[Kategorie:Bash/Scripting]]
==== Projekt ====
[[Kategorie:Regular Expression]]
==== Weblinks ====
# https://de.wikipedia.org/wiki/Sed_(Unix)
# [http://sed.sourceforge.net/ sed-Projektseite auf sourceforge] (englisch)
# [http://sed.sourceforge.net/grabbag/ seder’s grab bag] (englisch)
# [http://www.pement.org/sed/ sed für Windows mit funktionierender -i Option] ([[ZIP-Dateiformat|ZIP]]; 50&nbsp;kB)
# [https://tty1.net/sed-tutorium/index.html Ausführliches Tutorium] (deutsch)


{{DEFAULTSORT:sed}}
{{DEFAULTSORT:sed}}
{{DISPLAYTITLE:sed}}
[[Kategorie:Sed]]
[[Kategorie:Linux/Befehl]]

Aktuelle Version vom 12. Dezember 2024, 09:27 Uhr

sed - Stromeditor zum Filtern und Umwandeln von Text

Beschreibung

Unix-Werkzeug, mit dem Text-Datenströme bearbeitet werden können. Der Datenstrom kann auch aus einer Datei gelesen werden. Im Gegensatz zu einem Texteditor wird die Ursprungsdatei aber nicht verändert.

Im Gegensatz zu einem interaktiven Texteditor, wie etwa dem vi, wird sed mittels eines Skripts gesteuert.

Der sed-Befehlssatz orientiert sich an jenem des zeilenorientierten Texteditors ed. Dabei werden für die Text-Durchmusterung laut der POSIX-Spezifikation eine bestimmte Abart der Regular Expressions, sogenannte (POSIX-) Basic Regular Expressions (BRE) verwendet.[1] Die GNU-Implementation verwendet allerdings GNU-BREs, die von POSIX-BREs geringfügig abweichen.

Auch wenn der Sprachumfang von sed ziemlich limitiert und spezialisiert erscheint, so handelt es sich doch um eine Turing-vollständige Sprache. Beweisen kann man die Turing-Vollständigkeit, indem man eine Turingmaschine mittels sed programmiert[2][3] oder indem man mit sed einen Interpreter für eine andere, Turing-vollständige Sprache schreibt.[4]

Folglich konnten und wurden sogar Spiele wie Sokoban oder Arkanoid und andere anspruchsvolle Programme wie Debugger mit sed geschrieben.[5]

Sed ist ein Stromeditor (stream editor)
  • Ein Stromeditor wird für grundlegende Texttransformationen auf einen Eingabestrom (einer Datei oder aus einer Verarbeitungskette) verwandt.
  • Obwohl in einigen Aspekten ähnlich zu einem Editor, der Bearbeitungen nach Skript erlaubt (wie Ed), führt Sed nur einen Durchlauf über die Eingabe(n) durch und ist somit effizienter.
  • Allerdings ist es die Fähigkeit von Sed, Text in einer Verarbeitungskette zu filtern, die ihn besonders gegenüber anderen Arten von Editoren auszeichnet.
  • Da es ein "nicht-interaktives" Programm ist, kann es, falls gewünscht, zur Automatisierung der Bearbeitung verwendet werden.
  • Der Name sed ist eine Abkürzung für stream editor, und das Dienstprogramm leitet viele seiner Befehle vom ed line-editor ab (ed war der erste UNIX-Texteditor).
  • So können Sie mehrere Dateien bearbeiten oder gängige Bearbeitungsvorgänge durchführen, ohne jemals vi oder emacs öffnen zu müssen.
  • sed liest aus einer Datei oder von der Standardeingabe und gibt auf der Standardausgabe aus.
  • sed hat zwei Puffer, die Musterpuffer und Haltepuffer genannt werden.
  • Beide sind anfangs leer.
Funktionsweise
  • Geben Sie den Musterpuffer auf stdout aus.
  • Der Stream-Editor ist kein herkömmlicher Editor wie Vi oder Emacs.
  • Sed arbeitet nicht interaktiv, sondern wird über Kommandozeilenoptionen oder ein Skript gesteuert.
  • Sed verändert nicht das Original, sondern schreibt das Ergebnis auf die Standardausgabe.
  • Sed lädt die aktuell betrachtete Zeile in einen temporären Puffer - im Folgenden als Arbeitspuffer bezeichnet.

Arbeitsmethodik

Ausführungszyklus
  • Der Zyklus wird fortgesetzt, bis das Ende der Datei/Eingabe erreicht ist # Lesen einer ganzen Zeile aus stdin/file
  1. Entfernt alle nachstehenden Zeilenumbrüche
  2. Legt die Zeile in seinen Musterpuffer
  3. Ändert den Musterpuffer entsprechend den übergebenen Befehlen

Reguläre Ausdrücke

POSIX.2-BREs sollten unterstützt werden
  • Dies erfolgt allerdings aus Leistungsgründen nicht vollständig.
  • Die Sequenz \n in einem regulären Ausdruck passt auf das Zeilenumbruchzeichen und ähnliches gilt für \a, \t und andere Sequenzen.
  • Die Option -E schaltet auf die Verwendung von erweiterten regulären Ausdrücken um; sie wurde seit Jahren in GNU Sed unterstützt und ist jetzt in POSIX enthalten.

Installation

# apt install sed

Aufruf

$ sed [-V] [--version] [--help] [-n] [--quiet] [--silent]
[-l N] [--line-length=N] [-u] [--unbuffered]
[-E] [-r] [--regexp-extended]
[-e Skript] [--expression=script]
[-f Skriptdatei] [--file=Skriptdatei]
[script-if-no-other-script]
[Datei …]

Optionen

Unix GNU Beschreibung
-n --quiet, --silent unterdrückt die Ausgabe des Musterbereichs
--debug Kommentiert die Programmausführung
-e Skript --expression=Skript Fügt das Skript zu den auszuführenden Befehlen hinzu
-f Skriptdatei --file=Skriptdatei Fügt den Inhalt der Skriptdatei zu den auszuführenden Befehlen hinzu
--follow-symlinks Symbolischen Links bei der Bearbeitung an Ort und Stelle folgen
-i[ENDUNG] --in-place[=ENDUNG] Dateien an Ort und Stelle bearbeiten (erstellt Sicherung, falls ENDUNG angegeben)
-l N --line-length=N Gibt die gewünschte Zeilenumbruchlänge für den Befehl »l« an
--posix Deaktiviert alle GNU-Erweiterungen
-E, -r --regexp-extended Verwendet erweiterte reguläre Ausdrücke in dem Skript (für Portabilität verwenden Sie POSIX -E)
-s --separate Betrachtet Dateien getrennt statt als einzigen, kontinuierlichen langen Strom
--sandbox Arbeitet im »Sandbox«-Modus (deaktiviert e/r/w-Befehle)
-u --unbuffered Lädt minimale Datenmenge aus den Eingabedateien und schreibt die Ausgabepuffer öfter
-z --null-data Zeilen durch NUL-Zeichen trennen
--help zeigt Hilfeinformationen an und beendet das Programm
--version gibt Versionsinformationen aus und beendet das Programm

Befehle

Sed/Befehle

Rückgabewert

Anwendungen

Arbeitsweise

sed kann sowohl innerhalb einer Pipeline als auch auf Dateien arbeiten. Ausgaben erfolgen grundsätzlich auf <stdout>, Fehlermeldungen auf <stderr>. Der typische Aufruf sieht deshalb so aus:

sed 'Anweisung1
     Anweisung2
     …
     AnweisungN' Eingabedatei > Ausgabedatei
<stream> | sed 'Anweisung1
                Anweisung2
                …
                AnweisungN' | <stream>

sed liest eine Eingabedatei (oder einen input stream auf <stdin>) zeilenweise ein. Diese Eingangsdaten landen zunächst im sogenannten Pattern Space. Auf diesem Pattern Space wird nacheinander jede Anweisung des vorgegebenen Programmes ausgeführt. Jede dieser Anweisungen kann dabei den Pattern Space verändern, folgende Anweisungen werden dann auf dem jeweiligen Ergebnis der letzten Anweisung ausgeführt. Führt eine dieser Veränderungen zu einem Nulltext, so wird die Verarbeitung an dieser Stelle abgebrochen und die Anweisungsliste mit der nächsten Eingabezeile wieder von vorne begonnen. Ansonsten wird das Ergebnis der letzten Anweisung auf <stdout> ausgegeben und die Anweisungsliste ebenfalls mit der nächsten Eingabezeile wieder begonnen.

Siehe auch

  1. awk(1)
  2. ed(1)
  3. grep(1)
  4. tr(1)
  5. perlre(1)
  6. sed.info
  7. Sed-FAQ http://sed.sf.net/grabbag/tutorials/sedfaq.txt
  8. http://sed.sf.net/grabbag/

Dokumentation

  1. https://www.gnu.org/software/sed/manual/sed.html

Man-Page

Info-Pages

$ info sed

Links

Projekt

Weblinks

  1. https://de.wikipedia.org/wiki/Sed_(Unix)
  2. sed-Projektseite auf sourceforge (englisch)
  3. seder’s grab bag (englisch)
  4. sed für Windows mit funktionierender -i Option (ZIP; 50 kB)
  5. Ausführliches Tutorium (deutsch)