Stream Editor - Grundlegende Syntax

In diesem Kapitel werden die von SED unterstützten Grundbefehle und ihre Befehlszeilensyntax vorgestellt. SED kann in den folgenden zwei Formen aufgerufen werden:

sed [-n] [-e] 'command(s)' files 
sed [-n] -f scriptfile files

Das erste Formular ermöglicht die Angabe der Befehle in Zeile und sie sind in einfache Anführungszeichen eingeschlossen. Letzteres ermöglicht die Angabe einer Skriptdatei, die SED-Befehle enthält. Wir können jedoch beide Formulare mehrmals zusammen verwenden. SED bietet verschiedene Befehlszeilenoptionen zur Steuerung des Verhaltens.

Lassen Sie uns sehen, wie wir mehrere SED-Befehle angeben können. SED bietet diedeleteBefehl zum Löschen bestimmter Zeilen. Löschen wir die 1., 2. und 5. Zeile. Ignorieren Sie vorerst alle Details des Löschbefehls. Wir werden später mehr über den Löschbefehl diskutieren.

Zeigen Sie zunächst den Dateiinhalt mit dem an cat Befehl.

[jerry]$ cat books.txt

Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Weisen Sie nun SED an, nur bestimmte Zeilen zu entfernen. Um drei Zeilen zu löschen, haben wir hier drei separate Befehle mit der Option -e angegeben.

[jerry]$ sed -e '1d' -e '2d' -e '5d' books.txt

Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:

3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Darüber hinaus können wir mehrere SED-Befehle in eine Textdatei schreiben und die Textdatei als Argument für SED bereitstellen. SED kann jeden Befehl auf den Musterpuffer anwenden. Das folgende Beispiel zeigt die zweite Form von SED.

Erstellen Sie zunächst eine Textdatei mit SED-Befehlen. Verwenden wir zum leichteren Verständnis dieselben SED-Befehle.

[jerry]$ echo -e "1d\n2d\n5d" > commands.txt 
[jerry]$ cat commands.txt

Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:

1d 
2d 
5d

Weisen Sie nun die SED an, Befehle aus der Textdatei zu lesen. Hier erzielen wir das gleiche Ergebnis wie im obigen Beispiel.

[jerry]$ sed -f commands.txt books.txt

Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:

3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones,George R. R. Martin, 864

Standardoptionen

SED unterstützt die folgenden Standardoptionen:

  • -n: Standarddruck des Musterpuffers. Der folgende SED-Befehl zeigt beispielsweise keine Ausgabe an:

  • [jerry]$ sed -n '' quote.txt
  • -e : Das nächste Argument ist ein Bearbeitungsbefehl. Hier implizieren eckige Klammern obligatorische Parameter. Mit dieser Option können wir mehrere Befehle angeben. Drucken wir jede Zeile zweimal aus:

  • [jerry]$ sed -e '' -e 'p' quote.txt

Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist 
 - Paulo Coelho, The Alchemist
  • -f : Das nächste Argument ist eine Datei mit Bearbeitungsbefehlen. Die eckigen Klammern implizieren obligatorische Parameter. Im folgenden Beispiel geben wir den Druckbefehl über die Datei an:

[jerry]$ echo "p" > commands 
[jerry]$ sed -n -f commands quote.txt

Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist

GNU-spezifische Optionen

Lassen Sie uns schnell die GNU-spezifischen SED-Optionen durchgehen. Beachten Sie, dass diese Optionen GNU-spezifisch sind. und wird möglicherweise nicht von anderen Varianten der SED unterstützt. In späteren Abschnitten werden wir diese Optionen ausführlicher behandeln.

  • -n, --quiet, --silent: Entspricht der Standardoption -n.

  • -e Skript, --expression = Skript: Entspricht der Standardoption -e.

  • -f Skriptdatei, --file = Skriptdatei: Wie Standardoption -f.

  • --follow-symlinks: Wenn diese Option bereitgestellt wird, folgt die SED symbolischen Links, während Dateien an Ort und Stelle bearbeitet werden.

  • -i [SUFFIX], --in-place [= SUFFIX]: Mit dieser Option wird die Datei an Ort und Stelle bearbeitet. Wenn ein Suffix angegeben wird, wird eine Sicherungskopie der Originaldatei erstellt, andernfalls wird die Originaldatei überschrieben.

  • -l N, --line-lenght = N: Diese Option setzt die Zeilenlänge für den Befehl l auf N Zeichen.

  • --posix: Diese Option deaktiviert alle GNU-Erweiterungen.

  • -r, --regexp-extended: Mit dieser Option können erweiterte reguläre Ausdrücke anstelle grundlegender regulärer Ausdrücke verwendet werden.

  • -u, --unbuffered: Wenn diese Option bereitgestellt wird, lädt die SED eine minimale Datenmenge aus den Eingabedateien und löscht die Ausgabepuffer häufiger. Es ist nützlich, um die Ausgabe von "tail -f" zu bearbeiten, wenn Sie nicht auf die Ausgabe warten möchten.

  • -z, --null-data: Standardmäßig trennt die SED jede Zeile durch ein neues Zeilenzeichen. Wenn die Option NULL-Daten angegeben ist, werden die Zeilen durch NULL-Zeichen getrennt.