GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unix Sed Tutorial:Drucken von Dateizeilen mit Adresse und Mustern

Lassen Sie uns in diesem ersten Teil des sed-Tutorials untersuchen, wie Dateizeilen mit Adressen und Mustern gedruckt werden.

Wir werden in den kommenden Wochen mehrere großartige Sed-Tutorials mit Beispielen veröffentlichen.

Unix-Sed-Einführung

  • sed ist ein „nicht-interaktiver“ Stream-orientierter Editor. Da es „nicht interaktiv“ ist, kann es auf Wunsch 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 Zeileneditor ed ab (ed war der erste UNIX-Texteditor).
  • Dadurch können Sie mehrere Dateien bearbeiten oder allgemeine Bearbeitungsvorgänge ausführen, ohne jemals vi oder emacs öffnen zu müssen.
  • sed liest aus einer Datei oder von ihrer Standardeingabe und gibt sie an ihre Standardausgabe aus.
  • sed hat zwei Puffer, die Musterpuffer und Haltepuffer genannt werden. Beide sind zunächst leer.

Unix-Sed-Arbeitsmethodik

Dies wird als ein Ausführungszyklus bezeichnet. Der Zyklus wird fortgesetzt, bis das Ende der Datei/Eingabe erreicht ist.

  1. Lesen Sie eine ganze Zeile aus stdin/file.
  2. Entfernt alle abschließenden Zeilenumbrüche.
  3. Platziert die Linie in ihrem Musterpuffer.
  4. Ändern Sie den Musterpuffer gemäß den bereitgestellten Befehlen.
  5. Den Musterpuffer nach stdout ausgeben.

Druckvorgang in Sed

Mit dem Linux-Sed-Befehl können Sie nur bestimmte Zeilen basierend auf der Zeilennummer oder den Musterübereinstimmungen drucken. "p" ist ein Befehl zum Drucken der Daten aus dem Musterpuffer.

Um das automatische Drucken des Musterbereichs zu unterdrücken, verwenden Sie den Befehl -n mit sed. Die Option sed -n druckt nichts, es sei denn, es wird eine explizite Druckanforderung gefunden.

Syntax:
# sed -n 'ADDRESS'p filename

# sed -n '/PATTERN/p' filename

Lassen Sie uns zuerst die Datei thegeekstuff.txt erstellen, die in allen unten genannten Beispielen verwendet wird.

# cat thegeekstuff.txt
1. Linux - Sysadmin, Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Hardware
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)
8. Website Design
9. Software Development
10.Windows- Sysadmin, reboot etc.

5 Beispiele für das Sed ADDRESS-Format

Sed-Adressformat 1:NUMMER

Dies stimmt nur mit der N-ten Zeile in der Eingabe überein.

# sed -n ‘N’p filename

Beispielsweise druckt 3p die dritte Zeile der Eingabedatei thegeekstuff.txt wie unten gezeigt.

# sed -n '3'p thegeekstuff.txt
3. Hardware

Sed-Adressformat 2:NUMBER1~NUMBER2

M~N mit „p“-Befehl druckt jede N-te Zeile ab Zeile M.

# sed -n ‘M~N’p Dateiname

Beispiel:3~2p druckt jede zweite Zeile, beginnend mit der dritten Zeile, wie unten gezeigt.

# sed -n '3~2'p thegeekstuff.txt
3. Hardware
5. Storage
7. Productivity (Too many technologies to explore, not much time available)
9. Software Development

Sed-Adressformat 3:START,ENDE

M,N mit „p“-Befehl druckt M-te Zeile bis N-te Zeile.

# sed -n ‘M,N’p Dateiname

Beispiel:4,8p druckt von der 4. bis zur 8. Zeile aus der Eingabedatei thegeekstuff.txt

# sed -n '4,8'p thegeekstuff.txt
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)
8. Website Design

Sed-Adressformat 4:„$“ letzte Zeile

$ mit dem Befehl „p“ stimmt nur mit der letzten Zeile der Eingabe überein.

# sed -n ‘$’p filename

Zum Beispiel gibt $p nur die letzte Zeile aus, wie unten gezeigt.

# sed -n '$'p thegeekstuff.txt
10.Windows- Sysadmin, reboot etc.

Sed-Adressformat 5:ZAHL,$

N,$ mit dem Befehl „p“ druckt von der N-ten Zeile bis zum Ende der Datei.

# sed -n ‘N,$p’ Dateiname

Zum Beispiel 4,$p druckt von der 4. Zeile bis zum Ende der Datei.

# sed -n '4,$p' thegeekstuff.txt
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)
8. Website Design
9. Software Development
10.Windows- Sysadmin, reboot etc.

6 Beispiele für Sed PATTERN-Formate

Sed-Musterformat 1:MUSTER

PATTERN könnte ein regulärer Unix-Ausdruck sein. Der folgende Befehl gibt nur die Zeile aus, die dem angegebenen Muster entspricht.

# sed -n /MUSTER/p Dateiname

Zum Beispiel gibt folgendes nur die Zeile aus, die dem Muster „Sysadmin“ entspricht.

# sed -n /Sysadmin/p thegeekstuff.txt
1. Linux - Sysadmin, Scripting etc.
10.Windows- Sysadmin, reboot etc.

Sed-Musterformat 2:/MUSTER/,ADRESSE


# sed -n ‘/PATTERN/,Np’ Dateiname

Zum Beispiel druckt folgendes Zeilen, die dem Muster bis zur N-ten Zeile von der Eingabe entsprechen. Die 3. Zeile entspricht dem Muster „Hardware“, also wird von der 3. Zeile bis zur 6. Zeile gedruckt.

# sed -n '/Hardware/,6p' thegeekstuff.txt
3. Hardware
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites

Sed-Musterformat 3:ADRESSE,/MUSTER/

Es wird von der N-ten Zeile der Eingabe bis zu der Zeile gedruckt, die dem Muster entspricht. Wenn das Muster nicht übereinstimmt, wird bis zum Ende der Eingabe gedruckt.

# sed -n ‘N,/PATTERN/p’ Dateiname

Beispielsweise entspricht die vierte Zeile dem Muster „Sicherheit“, sodass es von der dritten bis zur vierten Zeile gedruckt wird.

# sed -n '3,/Security/p' thegeekstuff.txt
3. Hardware
4. Security (Firewall, Network, Online Security etc)

Sed-Musterformat 4:/PATTERN/,$

Es druckt von der Zeile, die dem angegebenen Muster entspricht, bis zum Ende der Datei.

# sed -n ‘/PATTERN/,$p’ Dateiname

# sed -n '/Website/,$p' thegeekstuff.txt
8. Website Design
9. Software Development
10.Windows- Sysadmin, reboot etc.

Sed-Musterformat 5:/MUSTER/,+N

Es druckt die Zeilen, die mit dem Muster übereinstimmen, und die nächsten N Zeilen nach der übereinstimmenden Zeile.

# sed -n ‘/PATTERN/,+Np’ filename

Zum Beispiel druckt following die 5. Zeile, die dem Muster /Storage/ entspricht, und die nächsten beiden Zeilen nach /Storage/.

# sed -n '/Storage/,+2p' thegeekstuff.txt
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)

Sed-Musterformat 6:/MUSTER/,/MUSTER/

Druckt den Dateiabschnitt zwischen zwei regulären Ausdrücken (einschließlich der übereinstimmenden Zeile ).

# sed -n ‘/P1/,/P2/p’ Dateiname

Zum Beispiel entspricht die 5. Zeile „Aufbewahrung“ und die 8. Zeile „Design“, also wird 5. bis 8. gedruckt.

# sed -n '/Storage/,/Design/p' thegeekstuff.txt
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)
8. Website Design

Linux
  1. Verwenden von sed zum Suchen und Ersetzen von Textdateien in Linux

  2. Linien zwischen (und ausschließenden) zwei Mustern drucken?

  3. Wert zwischen zwei Suchmustern in derselben Zeile extrahieren?

  4. Ersetzen Sie eine Zeile durch einen anderen Inhalt mit Sed und Parallel für eine große Datei?

  5. Zeile entfernen, die bestimmte Zeichenfolge und die folgende Zeile enthält?

So löschen Sie leere Zeilen in Dateien mit Grep, Sed und Awk

Unix Sed Tutorial:Suchen und Ersetzen von Text in einer Datei mit RegEx

Unix Sed Tutorial:Löschen Sie Dateizeilen mit Adresse und Mustern

Unix Sed Tutorial:So schreiben Sie mit Sed in eine Datei

Unix Sed Tutorial:Dateizeilen anhängen, einfügen, ersetzen und zählen

Unix Sed Tutorial:Mehrzeilige Dateioperation mit 6 praktischen Beispielen