Sed: Unterschied zwischen den Versionen

Aus Foxwiki
Zeile 207: Zeile 207:


== Sed-Skripte ==
== Sed-Skripte ==
Kompliziertere und häufig benötigte Sed-Aufrufe schreibt man besser in eine Datei.
[[Sed/Sed-Skripte]]
* Der Aufruf von Sed sieht dann wie folgt aus:
sed -f <Skript_Datei> <zu_bearbeitende_Datei>
 
Beim Schreiben eines Skripts gelten folgende Regeln: * Beginnt eine Zeile mit einem Doppelkreuz #, so handelt es sich um einen Kommentar
* 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.
 
Als Beispiel dient ein Skript, dass alle deutschen Umlaute in der Eingabedatei umschreibt.
'''cat umlaut'''
  ## Ersetzen Umlaute
  s/ä/\ae/g
  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:
'''sed -e '1,12d' -f umlaut test.txt'''
  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]]
[[Kategorie:Linux/Befehl]]

Version vom 31. März 2023, 10:57 Uhr

sed - strom-orientierter Editor zur Bearbeitung von Dateien anhand von Regeln

Beschreibung

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

So funktioniert's

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

Installation

Syntax

Optionen

Parameter

Umgebungsvariablen

Exit-Status

Anwendungen

Fehlerbehebung

Konfiguration

Dateien

Sicherheit

Siehe auch

Unterseiten

Dokumentation

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

RFC

Man-Pages

Info-Pages

Links

Einzelnachweise

Projekt

Weblinks

Testfragen

Testfrage 1

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5

TMP

Aufruf

Sed/Aufruf

Dateiübergabe

Sed/Dateiübergabe

Ausgabe

Sed/Ausgabe

Kommandoübersicht

Sed/Kommandos

Substitutionen

Sed/Substitutionen

Reguläre Ausdrücke

Sed/Regular Expressions

Beispieltexte

Sed/Beispieltext

Anweisungen

Sed/Anweisungen

Zeilen ausgeben

Sed/Zeilen ausgeben

Adressierung

Sed/Adressierung

Zeilen löschen

Sed/Zeilen löschen

Suchen und Ersetzen

Sed/Suchen und Ersetzen

Mehrere Kommandos [-e]

Sed/Mehrere Kommandos

Einfügen [i|a]

Sed/Einfügen

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.
h Mit dem Kommando »h« kann der aktuelle Zwischenspeicher in einen Puffer gesichert werden (»holding buffer«).
G Das Kommando »G« fügt den Inhalt dieses Sicherungspuffers hinter der aktuell bearbeiteten Zeile ein.
g »g« ersetzt die aktuelle Zeile durch den Inhalt des Sicherungspuffers.
x Den Inhalt der beiden Puffer vertauscht das Kommando »x«.

Beispiel 1

sed -e '/sed/{h;d;}' -e '4G' -e '4q' test.txt
 1 Der Aufruf des Stream Editors besitzt immer das Format:
 2 
 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
  • 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.
  • 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.
  • 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:
 2 
 3 sed 'Kommando' Dateiname
 4 
 5 Dabei kann dem Kommando mitgeteilt werden, welche Zeilen der
 6 Eingabedatei es bearbeiten soll. 
  • Als Adressierung kommen folgende
 7 Mechanismen in Frage:
 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
  • 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

Sed/Sed-Skripte