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