sed

Aus Foxwiki

sed - Stromeditor zum Filtern und Umwandeln von Text

Beschreibung

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.

Unix Sed Arbeitsmethodik

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.
  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

Syntax

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

Übersicht

Option Beschreibung
;»Befehle« ohne Adressen
: Marke Marke für b- und t-Befehle
#Kommentar Der Kommentar läuft bis zum nächsten Zeilenumbruch (oder dem Ende eines -e-Skriptfragments)
} Die schließende Klammer eines { }-Blocks

Befehle ohne oder mit einer Adresse

Option Beschreibung
= Gibt die aktuelle Zeilennumer aus
a \
Text Text anhängen, der eingebettete Zeilenumbrüche mit vorangestelltem Rückschrägstrich (»backslash«) enthält
i \
Text Text einfügen, der eingebettete Zeilenumbrüche mit vorangestelltem Rückschrägstrich (»backslash«) enthält
q [Rückgabewert] Das Sed-Skript sofort ohne Verarbeitung weiterer Eingabe beenden. Allerdings wird der aktuelle Musterbereich ausgegeben, falls »auto-print« nicht deaktiviert ist. Das Argument Rückgabewert ist eine GNU-Erweiterung
Q [Rückgabewert] Das Sed-Skript sofort ohne Verarbeitung weiterer Eingabe beenden. Dies ist eine GNU-Erweiterung
r Dateiname Aus Dateiname eingelesenen Text anhängen
R Dateiname Eine Zeile aus Dateiname einlesen und anhängen. Jeder Aufruf des Befehls liest eine Zeile der Datei. Dies ist eine GNU-Erweiterung

Befehle, die Adressbereiche akzeptieren

Option Beschreibung
{ Beginnt einen Befehlsblock (Ende mit einem })
b Marke Verzweigt zu Marke. Falls Marke fehlt, verzweigt zum Ende des Skripts
c \
Text Ersetzt die ausgewählte Zeile mit Text, der eingebettete Zeilenumbrüche mit vorangestelltem Rückschrägstrich (»backslash«) enthält
d Löscht den Musterbereich. Beginnt den nächsten Zyklus
D Falls der Musterbereich keinen Zeilenumbruch enthält, wird ein neuer Zyklus begonnen, als ob der Befehl »d« angegeben worden wäre. Andernfalls wird der Text im Musterbereich bis zu dem ersten Zeilenumbruch gelöscht und der Zyklus mit dem entstandenen Musterbereich neu gestartet, ohne eine neue Eingabezeile zu lesen.
h H Kopiert/Hängt den Musterbereich in den Haltebreich (hold space) (an)
g G Kopiert/Hängt den Haltebereich in den Musterbereich (an)
l Führt die aktuelle Zeile in einer »visuell eindeutigen« Art auf
l Breite Führt die aktuelle Zeile in einer »visuell eindeutigen« Art auf und bricht dabei nach Breite Zeichen um. Dies ist eine GNU-Erweiterung
n N Liest/Hängt die nächste Zeile der Eingabe in den Musterbereich (an)
p Gibt den aktuellen Musterbereich aus
P Gibt bis zum ersten eingebetteten Zeilenumbruch im aktuellen Musterbereich aus
s/RegAusdr/Ersatz/ Sucht die Entsprechung von RegAusdr im Musterbereich und falls erfolgreich, ersetzt den passenden Teil mit Ersatz. Ersatz kann das besondere Zeichen & enthalten, um auf den Teil des Musterbereichs zu verweisen, der passte, und die besonderen Maskiersequenzen \1 bis \9, die auf die entsprechenden passenden Teilausdrücke in RegAusdr verweisen.
t Marke Falls s/// eine erfolgreiche Ersetzung durchgeführt hat, seit die letzte Eingabezeile gelesen wurde und seit dem letzten t- oder T-Befehl, dann wird zu Marke verzweigt. Falls Marke fehlt, wird zum Ende des Skripts verzweigt.
T Marke Falls kein s/// eine erfolgreiche Ersetzung durchgeführt hat, seit die letzte Eingabezeile gelesen wurde und seit dem letzten t- oder T-Befehl, dann wird zu Marke verzweigt. Falls Marke fehlt, wird zum Ende des Skripts verzweigt.
w Dateiname Schreibt den aktuellen Musterbereich nach Dateiname
W Dateiname Schreibt die erste Zeile des aktuellen Musterbereichs in Dateiname. Dies ist eine GNU-Erweiterung
x Tauscht den Inhalt des Halte- und Musterbereichs
y/Quelle/Ziel/ Übersetzt die Zeichen im Musterbereich, die in Quelle auftauchen, in die entsprechenden Zeichen in Ziel

Parameter

Umgebungsvariablen

Exit-Status

Anwendungen

  1. Sed/Aufruf
  2. Sed/Dateiübergabe
  3. Sed/Ausgabe
  4. Sed/Kommandos
  5. Sed/Substitutionen
  6. Sed/Regular Expressions
  7. Sed/Beispieltext
  8. Sed/Anweisungen
  9. Sed/Zeilen ausgeben
  10. Sed/Adressierung
  11. Sed/Zeilen löschen
  12. Sed/Suchen und Ersetzen
  13. Sed/Mehrere Kommandos
  14. Sed/Einfügen
  15. Sed/Einfügen aus einer Datei
  16. Sed/Schreiben in eine Datei
  17. Sed/Dateien direkt bearbeiten
  18. Sed/Dateien ergänzen
  19. Sed/Nächste Zeile beabeiten
  20. Sed/Zeichen tauschen
  21. Sed/Sed vorzeitig beenden
  22. Sed/Zeilentausch
  23. Sed/Sed-Skripte

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/

Unterseiten

Dokumentation

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

Man-Pages

Info-Pages

$ info sed

Links

Einzelnachweise

Projekt

Weblinks

Testfragen

Testfrage 1

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5