Stream Editor - Musterpuffer

Eine der grundlegenden Operationen, die wir an einer Datei ausführen, ist die Anzeige ihres Inhalts. Zu diesem Zweck können wir die verwendenprintBefehl, der den Inhalt des Musterpuffers druckt. Lassen Sie uns also mehr über den Musterpuffer erfahren

Erstellen Sie zunächst eine Datei mit der Zeilennummer, dem Namen des Buches, seinem Autor und der Anzahl der Seiten. In diesem Tutorial werden wir diese Datei verwenden. Sie können jede Textdatei nach Ihren Wünschen verwenden. Unsere Textdatei sieht folgendermaßen aus:

[jerry]$ vi 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 
6) A Game of Thrones, George R. R. Martin, 864

Lassen Sie uns nun den Dateiinhalt drucken.

[jerry]$ sed 'p' books.txt

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.

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

Sie fragen sich vielleicht, warum jede Zeile zweimal angezeigt wird. Lass es uns herausfinden.

Erinnern Sie sich an den Workflow von SED? Standardmäßig druckt SED den Inhalt des Musterpuffers. Darüber hinaus haben wir einen Druckbefehl explizit in unseren Befehlsabschnitt aufgenommen. Daher wird jede Zeile zweimal gedruckt. Aber mach dir keine Sorgen. SED hat die-nOption zum Unterdrücken des Standarddrucks des Musterpuffers. Der folgende Befehl veranschaulicht dies.

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

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.

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

Herzliche Glückwünsche! Wir haben das erwartete Ergebnis erzielt. Standardmäßig arbeitet SED auf allen Leitungen. Wir können SED jedoch zwingen, nur auf bestimmten Leitungen zu arbeiten. Im folgenden Beispiel arbeitet SED beispielsweise nur in der 3. Zeile. In diesem Beispiel haben wir vor dem SED-Befehl einen Adressbereich angegeben.

[jerry]$ sed -n '3p' books.txt

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.

3) The Alchemist, Paulo Coelho, 197

Darüber hinaus können wir SED anweisen, nur bestimmte Zeilen zu drucken. Der folgende Code druckt beispielsweise alle Zeilen von 2 bis 5. Hier haben wir den Operator comma (,) verwendet, um den Adressbereich anzugeben.

[jerry]$ sed -n '2,5 p' books.txt

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.

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

Es gibt auch ein Sonderzeichen Dollar ($), das die letzte Zeile der Datei darstellt. Drucken wir also die letzte Zeile der Datei.

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

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.

6) A Game of Thrones, George R. R. Martin, 864

Wir können jedoch auch das Dollarzeichen ($) verwenden, um den Adressbereich anzugeben. Das folgende Beispiel druckt durch Zeile 3 bis zur letzten Zeile.

[jerry]$ sed -n '3,$ p' books.txt

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.

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

Wir haben gelernt, wie man einen Adressbereich mit dem Operator comma (,) angibt. SED unterstützt zwei weitere Operatoren, mit denen der Adressbereich angegeben werden kann. Erstens ist der Operator plus (+) und kann mit dem Operator comma (,) verwendet werden. Zum BeispielM, +n wird den nächsten drucken n Zeilen ab Zeilennummer M. Klingt verwirrend? Lassen Sie es uns anhand eines einfachen Beispiels überprüfen. Im folgenden Beispiel werden die nächsten 4 Zeilen ab Zeile 2 gedruckt.

[jerry]$ sed -n '2,+4 p' books.txt

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.

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

Optional können wir den Adressbereich auch mit dem Operator tilde (~) angeben. Es verwendetM~nbilden. Es zeigt an, dass SED bei Zeilennummer M beginnen und jede n (th) Zeile verarbeiten soll. Zum Beispiel,50~5stimmt mit den Zeilennummern 50, 55, 60, 65 usw. überein. Drucken wir nur ungerade Zeilen aus der Datei.

[jerry]$ sed -n '1~2 p' books.txt

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.

1) A Storm of Swords, George R. R. Martin, 1216 
3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288

Der folgende Code druckt nur gerade Zeilen aus der Datei.

[jerry]$ sed -n '2~2 p' books.txt

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.

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