Stream Editor - Grundlegende Befehle

In diesem Kapitel werden einige nützliche SED-Befehle beschrieben.

Befehl löschen

SED bietet verschiedene Befehle zum Bearbeiten von Text. Lassen Sie uns zuerst über die erkundendeleteBefehl. So führen Sie einen Löschbefehl aus:

[address1[,address2]]d

address1 und address2sind die Start- und die Endadresse, die entweder Zeilennummern oder Musterzeichenfolgen sein können. Beide Adressen sind optionale Parameter.

Wie der Name schon sagt, wird der Löschbefehl verwendet, um einen Löschvorgang auszuführen, und da die SED online arbeitet, können wir sagen, dass dieser Befehl zum Löschen von Zeilen verwendet wird. Beachten Sie, dass der Befehl delete nur Zeilen aus dem Musterpuffer entfernt. Die Zeile wird nicht an den Ausgabestream gesendet und die Originaldatei bleibt unverändert. Das folgende Beispiel veranschaulicht den Punkt.

[jerry]$ sed 'd' books.txt

Aber wo ist die Ausgabe? Wenn keine Leitungsadresse angegeben ist, arbeitet die SED standardmäßig auf jeder Leitung. Daher werden alle Zeilen aus dem Musterpuffer gelöscht. Aus diesem Grund druckt der Befehl nichts auf der Standardausgabe.

Lassen Sie uns die SED anweisen, nur auf bestimmten Leitungen zu arbeiten. Im folgenden Beispiel wird nur die 4. Zeile entfernt.

[jerry]$ sed '4d' 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 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Darüber hinaus akzeptiert SED auch den Adressbereich mit Komma (,). Wir können die SED anweisen, die Linien N1 bis N2 zu entfernen. Im folgenden Beispiel werden beispielsweise alle Zeilen von 2 bis 4 gelöscht.

[jerry]$ sed '2, 4 d' books.txt

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

1) A Storm of Swords, George R. R. Martin, 1216 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Der Adressbereich von SED ist nicht nur auf Zahlen beschränkt. Wir können auch Muster als Adresse angeben. Das folgende Beispiel entfernt alle Bücher des Autors Paulo Coelho.

[jerry]$ sed '/Paulo Coelho/d' 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 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Wir können einen Adressbereich auch mithilfe eines Textmusters angeben. Im folgenden Beispiel werden alle Linien zwischen den Mustern entferntStorm und Fellowship.

[jerry]$ sed '/Storm/,/Fellowship/d' books.txt  
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Darüber hinaus können wir mit SED auch Dollar- ($), Plus- (+) und Tilde- (~) Operatoren verwenden.

Schreibbefehl

Eine der wichtigen Operationen, die wir an einer Datei ausführen, ist die Sicherung, dh wir erstellen eine weitere Kopie der Datei. SED bietet diewriteBefehl zum Speichern des Inhalts des Musterpuffers in einer Datei. Unten ist die Syntax von angegebenwrite Befehl, der dem ähnlich ist delete Befehl.

[address1[,address2]]w file

Hier, address1 und address2sind die Start- und die Endadresse, die entweder Zeilennummern oder Musterzeichenfolgen sein können. Beide Adressen sind optionale Parameter.

In der obigen Syntax w bezieht sich auf den Schreibbefehl und fileist der Dateiname, in dem Sie Inhalte speichern. Sei vorsichtig mit demfileParameter. Wenn ein Dateiname angegeben wird, erstellt die SED eine Datei im laufenden Betrieb, wenn sie nicht vorhanden ist, und überschreibt sie, wenn sie bereits vorhanden ist.

Lassen Sie uns mit SED eine exakte Kopie der Datei erstellen. Beachten Sie, dass genau ein Leerzeichen dazwischen sein mussw und file.

[jerry]$ sed -n 'w books.bak' books.txt

Wir haben eine weitere Datei namens erstellt books.bak. Stellen Sie nun sicher, dass beide Dateien den gleichen Inhalt haben.

[jerry]$ diff books.txt books.bak  
[jerry]$ echo $?

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

0

Sie können davon ausgehen, dass die cpBefehl macht genau das gleiche. Ja! DascpBefehl macht das gleiche, aber SED ist ein ausgereiftes Dienstprogramm. Es ermöglicht das Erstellen einer Datei, die nur bestimmte Zeilen aus der Quelldatei enthält. Speichern wir nur gerade Zeilen in einer anderen Datei.

[jerry]$ sed -n '2~2 w junk.txt' books.txt  
[jerry]$ cat junk.txt

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

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Sie können mit dem Befehl write auch die Operatoren comma (,), dollar ($) und plus (+) verwenden.

Darüber hinaus unterstützt SED auch den Mustervergleich mit dem Schreibbefehl. Angenommen, Sie möchten alle Bücher einzelner Autoren in einer separaten Datei speichern. Ein langweiliger und langwieriger Weg ist es manuell zu machen, und der klügere Weg ist die Verwendung von SED.

[jerry]$ sed -n -e '/Martin/ w Martin.txt' -e '/Paulo/ w Paulo.txt' -e '/Tolkien/ w 
Tolkien.txt' books.txt

Im obigen Beispiel vergleichen wir jede Zeile mit einem Muster und speichern die übereinstimmende Zeile in einer bestimmten Datei. Es ist sehr einfach. Um mehrere Befehle anzugeben, haben wir verwendet-eSchalter des SED-Befehls. Lassen Sie uns nun sehen, was jede Datei enthält:

[jerry]$ cat Martin.txt

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

1) A Storm of Swords, George R. R. Martin, 1216 
6) A Game of Thrones, George R. R. Martin, 864

Lassen Sie uns den Dateiinhalt anzeigen.

[jerry]$ cat Paulo.txt

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

3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288

Lassen Sie uns den Dateiinhalt anzeigen.

[jerry]$ cat Tolkien.txt

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

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432

Ausgezeichnet! Wir haben das erwartete Ergebnis erzielt. SED ist wirklich ein erstaunliches Dienstprogramm.

Befehl anhängen

Eine der nützlichsten Operationen eines Texteditors ist das Bereitstellen von Anhängefunktionen. SED unterstützt diesen Vorgang über den Befehl append. Im Folgenden wird die Syntax von append angegeben:

[address]a\ 
Append text

Fügen wir nach Zeile 4 einen neuen Bucheintrag hinzu. Das folgende Beispiel zeigt, wie es geht

[jerry]$ sed '4 a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Im Befehlsabschnitt 4 impliziert die Zeilennummer, a ist der Befehl zum Anhängen, und der verbleibende Teil ist der anzuhängende Text.

Fügen wir am Ende der Datei eine Textzeile ein. Verwenden Sie dazu$als Adresse. Das folgende Beispiel veranschaulicht dies:

[jerry]$ sed '$ a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234

Neben der Zeilennummer können wir auch eine Adresse anhand eines Textmusters angeben. Im folgenden Beispiel wird beispielsweise Text nach dem Abgleichen der Zeichenfolge angehängtThe Alchemist.

[jerry]$ sed '/The Alchemist/ a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234 
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

Beachten Sie, dass bei mehreren übereinstimmenden Mustern der Text nach jeder Übereinstimmung angehängt wird. Das folgende Beispiel veranschaulicht dieses Szenario.

[jerry]$ sed '/The/ a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 234 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
7) Adultry, Paulo Coelho, 234 
6) A Game of Thrones, George R. R. Martin, 864

Befehl ändern

SED bietet change oder replaceBefehl, der durch c dargestellt wird. Dieser Befehl hilft, eine vorhandene Zeile durch neuen Text zu ersetzen. Wenn ein Zeilenbereich angegeben ist, werden alle Zeilen als Gruppe durch eine einzelne Textzeile ersetzt. Im Folgenden ist die Syntax des Änderungsbefehls angegeben:

[address1[,address2]]c\ 
Replace text

Ersetzen wir die dritte Zeile durch einen anderen Text.

[jerry]$ sed '3 c 3) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324 
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

SED akzeptiert auch Muster als Adresse. Im folgenden Beispiel wird eine Linie ersetzt, wenn die Musterübereinstimmung erfolgreich ist.

[jerry]$ sed '/The Alchemist/ c 3) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324 
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

SED ermöglicht auch das Ersetzen mehrerer Leitungen durch eine einzelne Leitung. Im folgenden Beispiel werden Zeilen vom vierten bis zum sechsten entfernt und durch neuen Text ersetzt.

[jerry]$ sed '4, 6 c 4) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324

Befehl einfügen

Der Befehl insert funktioniert ähnlich wie append. Der einzige Unterschied besteht darin, dass eine Zeile vor einer bestimmten Position eingefügt wird. Im Folgenden wird die Syntax des Befehls insert angegeben:

[address]i\ 
Insert text

Lassen Sie uns den Befehl insert anhand einiger Beispiele verstehen. Der folgende Befehl fügt vor der vierten Zeile einen neuen Eintrag ein.

[jerry]$ sed '4 i 7) Adultry, Paulo Coelho, 324' 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 
7) Adultry, Paulo Coelho, 324 
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

Im obigen Beispiel ist 4 ist die Standortnummer, i impliziert den Befehl insert und der verbleibende Teil ist der einzufügende Text.

Geben Sie die Zeilenadresse als ein, um Text am Anfang einer Datei einzufügen 1. Der folgende Befehl veranschaulicht dies:

[jerry]$ sed '1 i 7) Adultry, Paulo Coelho, 324' books.txt

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

7) Adultry, Paulo Coelho, 324
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

Zusätzlich können wir mehrere Zeilen einfügen. Der folgende Befehl fügt zwei Zeilen vor der letzten Zeile ein.

[jerry]$ sed '$ i 7) Adultry, Paulo Coelho, 324

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

8) Eleven Minutes, Paulo Coelho, 304' books.txt 
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 
7) Adultry, Paulo Coelho, 324 
8) Eleven Minutes, Paulo Coelho, 304 
6) A Game of Thrones, George R. R. Martin, 864

Beachten Sie, dass die einzufügenden Einträge in separaten Zeilen eingegeben und durch das Backslash-Zeichen (\) begrenzt werden.

Befehl übersetzen

SED bietet einen Befehl zum Übersetzen von Zeichen und wird als dargestellt y. Es transformiert die Zeichen nach Position. Im Folgenden ist die Syntax des Übersetzungsbefehls angegeben:

[address1[,address2]]y/list-1/list-2/

Beachten Sie, dass die Übersetzung auf der Position des Zeichens von basiert list 1 zu dem Charakter in der gleichen Position in list 2und beide Listen müssen explizite Zeichenlisten sein. Reguläre Ausdrücke und Zeichenklassen werden nicht unterstützt. Zusätzlich ist die Größe vonlist 1 und list 2 muss gleich sein.

Das folgende Beispiel konvertiert arabische Zahlen in römische Zahlen.

[jerry]$ echo "1 5 15 20" | sed 'y/151520/IVXVXX/'

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

I V IV XX

l Befehl

Können Sie zwischen Wörtern, die durch Leerzeichen getrennt sind, und Wörtern, die durch Tabulatoren getrennt sind, nur durch Betrachten unterscheiden? Sicherlich nicht. Aber SED kann das für Sie tun. SED verwendet dielBefehl zum Anzeigen versteckter Zeichen im Text. Zum Beispiel Tabulatorzeichen mit\t und End-Of-Line mit $Charakter. Unten ist die Syntax von angegebenl Befehl.

[address1[,address2]]l 
[address1[,address2]]l [len]

Lassen Sie uns zur Demonstration eine Datei mit Tabulatorzeichen erstellen. Der Einfachheit halber werden wir dieselbe Datei verwenden, indem wir nur Leerzeichen durch Tabulatoren ersetzen. Warten! Aber wie geht das - indem Sie die Datei in einem Texteditor öffnen und jedes Leerzeichen durch eine Registerkarte ersetzen? Sicherlich nicht! Dafür können wir SED-Befehle verwenden.

[jerry]$ sed 's/ /\t/g' books.txt > junk.txt

Lassen Sie uns nun die versteckten Zeichen mit dem anzeigen l Befehl:

[jerry]$ sed -n 'l' junk.txt

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

1)\tA\tStorm\tof\tSwords,George\tR.\tR.\tMartin,1216$ 
2)\tThe\tTwo\tTowers,J.\tR.\tR.\tTolkien,352$ 
3)\tThe\tAlchemist,Paulo\tCoelho,197$ 
4)\tThe\tFellowship\tof\tthe\tRing,J.\tR.\tR.\tTolkien,432$ 
5)\tThe\tPilgrimage,Paulo\tCoelho,288$ 
6)\tA\tGame\tof\tThrones,George\tR.\tR.\tMartin\t,864$

Wie andere SED-Befehle akzeptiert es auch Zeilennummern und Muster als Adresse. Sie können es selbst versuchen.

Schauen wir uns ein weiteres interessantes Feature von SED genauer an. Wir können die SED anweisen, nach einer bestimmten Anzahl von Zeichen einen Zeilenumbruch durchzuführen. Im folgenden Beispiel werden Zeilen nach 25 Zeichen umbrochen.

[jerry]$ sed -n 'l 25' books.txt

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

1) A Storm of Swords,Geo\ 
rge R. R. Martin,1216$ 
2) The Two Towers,J. R. \ 
R. Tolkien,352$ 
3) The Alchemist,Paulo C\ 
oelho,197$ 
4) The Fellowship of the\ 
 Ring,J. R. R. Tolkien,4\ 
32$ 
5) The Pilgrimage,Paulo \ 
Coelho,288$ 
6) A Game of Thrones,Geo\ 
rge R. R. Martin ,864$

Beachten Sie, dass im obigen Beispiel das Umbruchlimit nach dem Befehl l angegeben wird. In diesem Fall sind es 25 Zeichen. Diese Option ist GNU-spezifisch und funktioniert möglicherweise nicht mit anderen Varianten der SED.

Ein Zeilenumbruch von 0 bedeutet, dass die Zeile niemals unterbrochen wird, es sei denn, es gibt ein neues Zeilenzeichen. Der folgende einfache Befehl veranschaulicht dies.

[jerry]$ sed -n 'l 0' 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$

Befehl beenden

Der Befehl Beenden weist die SED an, den aktuellen Ausführungsablauf zu beenden. Es wird vertreten durch dieqBefehl. Im Folgenden wird die Syntax des Befehls quit angegeben:

[address]q 
[address]q [value]

Beachten Sie, dass der Befehl quit keinen Adressbereich akzeptiert, sondern nur eine einzelne Adresse unterstützt. Standardmäßig folgt SED dem Lese-, Ausführungs- und Wiederholungsworkflow. Wenn der Befehl quit jedoch auftritt, wird die aktuelle Ausführung einfach gestoppt.

Drucken wir die ersten 3 Zeilen aus der Datei.

[jerry]$ sed '3 q' 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

Zusätzlich zur Zeilennummer können wir auch Textmuster verwenden. Der folgende Befehl wird beendet, wenn die Musterübereinstimmung erfolgreich ist.

[jerry]$ sed '/The Alchemist/ q' 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

Darüber hinaus kann SED auch a akzeptieren valueDies kann als Exit-Status verwendet werden. Der folgende Befehl zeigt den Beendigungsstatus als 100 an.

[jerry]$ sed '/The Alchemist/ q 100' 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

Lassen Sie uns nun den Exit-Status überprüfen.

[jerry]$ echo $?

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

100

Befehl lesen

Wir können die SED anweisen, den Inhalt einer Datei zu lesen und anzuzeigen, wenn eine bestimmte Bedingung erfüllt ist. Der Befehl wird durch das Alphabet dargestelltr. Unten ist die Syntax des Lesebefehls angegeben.

[address]r file

Beachten Sie, dass zwischen dem genau ein Leerzeichen stehen muss r Befehl und den Dateinamen.

Lassen Sie es uns anhand eines einfachen Beispiels verstehen. Erstellen Sie eine Beispieldatei mit dem Namenjunk.txt.

[jerry]$ echo "This is junk text." > junk.txt

Der folgende Befehl weist die SED an, den Inhalt von zu lesen junk.txt und fügen Sie sie nach der dritten Zeile ein.

[jerry]$ sed '3 r junk.txt' 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 
This is junk text. 
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

Im obigen Beispiel impliziert 3 die Leitungsadresse, r ist der Befehlsname und junk.txtist der Dateiname, dessen Inhalt angezeigt werden soll. Darüber hinaus akzeptiert die GNU SED auch eine Reihe von Adressen. Mit dem folgenden Befehl wird beispielsweise der Inhalt von eingefügtjunk.txt nach der dritten, vierten und fünften Zeile.

[jerry]$ sed '3, 5 r junk.txt' 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 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
This is junk text. 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

Wie andere SED-Befehle akzeptiert auch der Lesebefehl das Muster als Adresse. Mit dem folgenden Befehl wird beispielsweise der Inhalt von eingefügtjunk.txt wenn die Musterübereinstimmung erfolgreich ist.

[jerry]$ sed '/Paulo/ r junk.txt' 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 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

Befehl ausführen

Wir können externe Befehle von SED mit dem ausführen executeBefehl. Es wird vertreten durche. Unten ist die Syntax des Befehls execute angegeben.

[address1[,address2]]e [command]

Lassen Sie uns den Befehl execute anhand eines einfachen Beispiels veranschaulichen. Der folgende SED-Befehl führt UNIX ausdate Befehl vor der dritten Zeile.

[jerry]$ sed '3 e date' 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 
Sun Sep  7 18:04:49 IST 2014 
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

Wie andere Befehle akzeptiert es auch Muster als Adresse. Das folgende Beispiel wird beispielsweise ausgeführtdateBefehl, wenn eine Musterübereinstimmung erfolgreich ist. Beachten Sie, dass nach jeder Musterübereinstimmung zuerst der Befehl ausgeführt wird und dann der Inhalt des Musterpuffers angezeigt wird.

[jerry]$ sed '/Paulo/ e date' 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 
Sun Sep  7 18:06:04 IST 2014 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
Sun Sep  7 18:06:04 IST 2014 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Wenn Sie die Syntax der e Befehl sorgfältig, werden Sie das bemerken commandes ist optional. Wenn danach kein Befehl mehr bereitgestellt wirde,Der Inhalt des Musterpuffers wird als externer Befehl behandelt. Um dies zu veranschaulichen, erstellen wir eine Datei "command.txt" mit einigen einfachen Befehlen.

[jerry]$ echo -e "date\ncal\nuname" > commands.txt 
[jerry]$ cat commands.txt

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

date 
cal 
uname

Befehle aus der Datei sind selbsterklärend. In Abwesenheit voncommand nach e,SED führt alle diese Befehle einzeln aus. Das folgende einfache Beispiel veranschaulicht dies.

[jerry]$ sed 'e' commands.txt

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

Sun Sep  7 18:14:20 IST 2014 
   September 2014      
Su Mo Tu We Th Fr Sa   
    1  2  3  4  5  6   
 7  8  9 10 11 12 13   
14 15 16 17 18 19 20   
21 22 23 24 25 26 27   
28 29 30               
                       
Linux

Wie andere SED-Befehle akzeptiert auch der Befehl execute alle gültigen Adressbereiche.

Verschiedene Befehle

Standardmäßig arbeitet SED auf einer einzelnen Leitung, kann jedoch auch auf mehreren Leitungen arbeiten. Mehrzeilige Befehle werden durch Großbuchstaben gekennzeichnet. Zum Beispiel im Gegensatz zu denn Befehl, die NBefehl löscht und druckt den Musterbereich nicht. Stattdessen wird am Ende des aktuellen Musterbereichs eine neue Zeile (\ n) hinzugefügt, die nächste Zeile aus der Eingabedatei an den aktuellen Musterbereich angehängt und der Standardfluss der SED fortgesetzt, indem die restlichen SED-Befehle ausgeführt werden. Unten ist die Syntax von angegebenN Befehl.

[address1[,address2]]N

Lassen Sie uns eine durch Kommas getrennte Liste der Buchtitel und ihrer jeweiligen Autoren drucken. Das folgende Beispiel veranschaulicht dies.

[jerry]$ sed 'N; s/\n/, /g' books.txt

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

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

Lassen Sie uns verstehen, wie das obige Beispiel funktioniert. DasNDer Befehl liest die erste Zeile, dh einen Sturm der Schwerter, in den Musterpuffer und hängt \ n an, gefolgt von der nächsten Zeile. Der Musterraum enthält jetzt einen Sturm der Schwerter\nGeorge RR Martin. Im nächsten Schritt ersetzen wir die neue Zeile durch ein Komma.

Mögen p Befehl, wir haben eine P Befehl zum Drucken des ersten Teils (bis zur eingebetteten Zeilenumbruch) des mehrzeiligen Musterbereichs, der vom erstellt wurde NBefehl. Unten ist die Syntax von angegebenP Befehl, der dem ähnlich ist p Befehl.

[address1[,address2]]P

Im vorherigen Beispiel haben wir gesehen, dass die NBefehl erstellt eine durch Zeilenumbrüche getrennte Liste der Buchtitel und ihrer Autoren. Drucken wir nur den ersten Teil davon, dh nur die Titel des Buches. Der folgende Befehl veranschaulicht dies.

[jerry]$ sed -n 'N;P' books.txt

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

A Storm of Swords 
The Two Towers 
The Alchemist 
The Fellowship of the Ring 
The Pilgrimage 
A Game of Thrones

Beachten Sie, dass in Abwesenheit von N, es verhält sich genauso wie das pBefehl. Der folgende einfache Befehl veranschaulicht dieses Szenario.

[jerry]$ sed -n 'P' books.txt

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

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones 
George R. R. Martin

Darüber hinaus bietet SED auch eine vBefehl, der nach der Version sucht. Wenn die bereitgestellte Version größer als die installierte SED-Version ist, schlägt die Befehlsausführung fehl. Beachten Sie, dass diese Option GNU-spezifisch ist und möglicherweise nicht mit anderen SED-Varianten funktioniert. Unten ist die Syntax von angegebenv Befehl.

[address1[,address2]]v [version]

Informieren Sie sich zunächst über die aktuelle Version von SED.

[jerry]$ sed --version

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

sed (GNU sed) 4.2.2

Im folgenden Beispiel ist die SED-Version größer als Version 4.2.2, daher bricht der SED-Befehl seine Ausführung ab.

[jerry]$ sed 'v 4.2.3' books.txt

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

sed: -e expression #1, char 7: expected newer version of sed

Wenn die bereitgestellte Version jedoch kleiner oder gleich Version 4.2.2 ist, funktioniert der Befehl wie erwartet.

[jerry]$ sed 'v 4.2.2' books.txt

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

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones George R. R. Martin