So verwenden Sie den Befehl sed, um bestimmte Zeilen einer Datei effizient zu löschen

So verwenden Sie den Befehl sed, um bestimmte Zeilen einer Datei effizient zu löschen

Vorwort

Wenn wir bestimmte Zeilen in einer Datei löschen möchten, öffnen wir normalerweise zuerst die Datei, suchen dann den zu löschenden Inhalt, wählen dann diese Zeilen aus und drücken die Entf-Taste, um sie zu löschen. Dies ist kein Problem, wenn die Datenmenge gering ist. Wenn die Datei jedoch viele Datenzeilen enthält und die Daten kompliziert sind, wäre es schlimm, wenn Sie trotzdem noch die obige Methode verwenden würden. Zu diesem Zweck zeigt Ihnen der heutige Artikel, wie Sie mit dem Befehlszeilentool sed bestimmte Inhaltszeilen in einer Datei effizient und elegant löschen, selbst wenn die Daten groß und komplex sind.

sed ist die Abkürzung für Stream Editor. Es wird für die grundlegende Textkonvertierung in Linux verwendet. Es ist ein wichtiger Befehl für Dateioperationen. Daher können wir ihn auch zum Löschen von Text verwenden.

Nachfolgend finden Sie einige Beispiele für die Verwendung des sed-Befehls, die die meisten Anwendungsszenarien abdecken. Sie helfen Ihnen dabei, den sed-Befehl vom einfachsten bis zum komplexesten zu erlernen, sodass Sie bestimmte Zeilen einer Datei einfach und effizient löschen können.

Zuerst bereiten wir eine Demonstrationsdatei sed-demo.txt vor.

# Katze sed-demo.txt

1 Linux-Betriebssystem
2 Unix-Betriebssystem
3 RHEL
4 Roter Hut
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9. Ubuntu
10 openSUSE

Dann können wir mit dem sed-Befehl experimentieren.

Hinweis: -i bedeutet, Dateioperationen direkt auszuführen, ohne die Ergebnisse auf dem Terminal anzuzeigen. Da es sich hier um eine Demonstration handelt, wird die Option -i hier nicht verwendet. Verwenden Sie in der Praxis bitte die Option -i.

1. Löschen einer Zeile

Zuerst löschen wir eine Zeile, beispielsweise die erste oder die letzte Zeile, die eigentlich die N-te Zeile ist.

Das Befehlsformat zum Löschen von Zeile N ist:

sed 'Nd'-Datei

Versuchen wir, die erste Zeile zu löschen:

# sed '1d' sed-demo.txt

Nach dem Löschen:
2 Unix-Betriebssystem
3 RHEL
4 Roter Hut
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9. Ubuntu
10 openSUSE

Einfach, oder? Ich werde es hier nicht im Detail erklären. Ersetzen Sie einfach 1 im Befehl durch die Zeile, die Sie löschen möchten.

Nun stellt sich die Frage, welche Zahl wird zur Darstellung der letzten Zeile verwendet? Hier noch ein Tipp für alle. Das Dollarzeichen $ kann man als Zeichen für das Ende verwenden, der Befehl zum Löschen der letzten Zeile kann also folgendermaßen geschrieben werden:

# sed '$d' sed-demo.txt

Nach dem Löschen:
1 Linux-Betriebssystem
2 Unix-Betriebssystem
3 RHEL
4 Roter Hut
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9. Ubuntu

2. Löschen Sie einige Zeilen

Der Befehl sed kann aufeinanderfolgende oder nicht aufeinanderfolgende Zeilen löschen.

Löschen Sie aufeinanderfolgende Zeilen, zum Beispiel die Zeilen 5 bis 7:

# sed '5,7d' sed-demo.txt

Nach dem Löschen:
1 Linux-Betriebssystem
2 Unix-Betriebssystem
3 RHEL
4 Roter Hut
8 Debian
9. Ubuntu
10 openSUSE

Löschen Sie nicht aufeinanderfolgende Zeilen, beispielsweise die 1., 5., 9. und letzte Zeile:

# sed '1d;5d;9d;$d' sed-demo.txt

Nach dem Löschen:

2 Unix-Betriebssystem
3 RHEL
4 Roter Hut
6 Arch Linux
7 CentOS
8 Debian

Darüber hinaus kann es auch mit logischem NICHT! verwendet werden, um beispielsweise alle Zeilen außer den Zeilen 3 bis 6 zu löschen:

# sed '3,6!d' sed-demo.txt

Nach dem Löschen:

3 RHEL
4 Roter Hut
5 Fedora
6 Arch Linux

3. Leere Zeilen löschen

sed unterstützt auch das Löschen leerer Zeilen in Dateien. Der Befehl lautet wie folgt:

# sed '/^$/d' sed-demo.txt

Nach dem Löschen:

1 Linux-Betriebssystem
2 Unix-Betriebssystem
3 RHEL
4 Roter Hut
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9. Ubuntu
10 openSUSE

Tipp: Der Ausdruck zwischen den beiden Schrägstrichen // dient hier der Textübereinstimmung. Sie können sich auf die Verwendung regulärer Ausdrücke beziehen. Nachfolgend finden Sie einige häufig verwendete Methoden zur Vertiefung Ihres Lernerfolgs.

4. Löschen Sie Zeilen, die bestimmte Zeichen enthalten

Angenommen, wir möchten die Zeilen in der Beispieldatei löschen, die das Wort „System“ enthalten. Wir können /System/ verwenden, was bedeutet, dass die Zeichenfolge „System“ immer dann abgeglichen wird, wenn sie vorkommt. Der spezifische Befehl lautet wie folgt:

# sed '/System/d' sed-demo.txt

Nach dem Löschen:

3 RHEL
4 Roter Hut
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9. Ubuntu
10 openSUSE

Darüber hinaus können wir auch logische Bedingungen hinzufügen, wie zum Beispiel den folgenden Befehl:

# sed '/System\|Linux/d' sed-demo.txt

Nach dem Löschen:

3 RHEL
4 Roter Hut
5 Fedora
7 CentOS
8 Debian
9. Ubuntu
10 openSUSE

Das Symbol \| steht für ein logisches ODER. Der obige Befehl bedeutet, dass alle Zeilen, die im Text „System“ oder „Linux“ enthalten, gelöscht werden sollen.

5. Löschen Sie Zeilen, die mit bestimmten Zeichen beginnen

Zunächst erstellen wir zur besseren Demonstration eine weitere Beispieldatei sed-demo-1.txt, deren Inhalt wie folgt ist:

# Katze sed-demo-1.txt

Nach dem Löschen:
Linux-Betriebssystem
Unix-Betriebssystem
RHEL
Red Hat
Fedora
Debian
Ubuntu
Arch Linux - 1
2 – Manjaro
3 4 5 6

Wie oben erwähnt, kann das $-Zeichen als Ende verstanden werden. Gibt es also irgendein Zeichen, das den Anfang darstellen kann? Die Antwort ist ja. Hier können wir das Zeichen ^ verwenden, um den Anfang darzustellen.

Wenn wir dann die Zeilen löschen möchten, die mit einem bestimmten Zeichen beginnen, beispielsweise die Zeilen, die mit R beginnen, können wir den folgenden Befehl verwenden:

# sed '/^R/d' sed-demo-1.txt

Nach dem Löschen:
Linux-Betriebssystem
Unix-Betriebssystem
Fedora
Debian
Ubuntu
Arch Linux - 1
2 – Manjaro
3 4 5 6

Die Frage ist also, wenn ich beispielsweise die Zeile löschen möchte, die mit R oder F beginnt, muss ich den Befehl dann zweimal ausführen? Wenn es mehr sind, müssen Sie dann nicht mehrere Befehle ausführen? Hier ist eine einfache Möglichkeit, es zu schreiben. Sie müssen nur diese Zeichen in ein Paar eckiger Klammern [] schreiben:

# sed '/^[RF]/d' sed-demo-1.txt

Nach dem Löschen:
Linux-Betriebssystem
Unix-Betriebssystem
Debian
Ubuntu
Arch Linux - 1
2 – Manjaro
3 4 5 6

Mit dem obigen Befehl werden die Zeilen gelöscht, die mit R oder F beginnen.

6. Löschen Sie Zeilen, die mit bestimmten Zeichen enden

Dasselbe Prinzip gilt auch für das Löschen von Zeilen, die mit einem bestimmten Zeichen enden. Um beispielsweise Zeilen zu löschen, die mit m enden, können wir Folgendes tun:

# sed '/m$/d' sed-demo.txt

Nach dem Löschen:
3 RHEL
4 Roter Hut
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9. Ubuntu
10 openSUSE

Um Zeilen zu löschen, die mit x oder m enden, können Sie Folgendes schreiben:

# sed '/[xm]$/d' sed-demo.txt

Nach dem Löschen:

3 RHEL
4 Roter Hut
5 Fedora
7 CentOS
8 Debian
9. Ubuntu
10 openSUSE

7. Löschen Sie Zeilen, die mit einem Großbuchstaben beginnen

Hier kommt erneut die Frage: Was ist, wenn ich alle Zeilen löschen möchte, die mit einem Großbuchstaben beginnen? Müssen wir nach der obigen Methode alle 26 Buchstaben von A bis Z in [ ] schreiben? Eigentlich müssen wir das nicht tun, wir können einfach ein - zwischen A und Z hinzufügen:

# sed '/^[A-Z]/d' sed-demo-1.txt

Nach dem Löschen:
Debian
Ubuntu
2 – Manjaro
3 4 5 6

Nach dem Lesen dieses Artikels sind Sie schlau genug, um an weitere ähnliche Verwendungsmöglichkeiten zu denken. Schauen Sie sich doch einmal die folgenden Befehle an, um zu sehen, ob Ihnen welche einfallen.

8. Löschen Sie Zeilen mit alphabetischen Zeichen

# sed '/[A-Za-z]/d' sed-demo-1.txt

Nach dem Löschen:
3 4 5 6

9. Löschen Sie die Zeilen mit Zahlen

# sed '/[0-9]/d' sed-demo-1.txt

Nach dem Löschen:

Linux-Betriebssystem
Unix-Betriebssystem
RHEL
Red Hat
Fedora
Debian
Ubuntu

Zusätzlich können wir anhand dieses Beispiels ^ und $ hinzufügen, um den Unterschied zwischen den dreien besser zu erkennen:

# sed '/^[0-9]/d' sed-demo-1.txt

Nach dem Löschen:

Linux-Betriebssystem
Unix-Betriebssystem
RHEL
Red Hat
Fedora
Debian
Ubuntu
Arch Linux - 1

# sed '/[0-9]$/d' sed-demo-1.txt

Nach dem Löschen:

Linux-Betriebssystem
Unix-Betriebssystem
RHEL
Red Hat
Fedora
Debian
Ubuntu
2 – Manjaro

10. Mehr

Tatsächlich ist der Dateiinhalt, den wir löschen möchten, spezifischer und einfache Bedingungen können unseren Anforderungen nicht genügen, sodass sed auch komplexere Bedingungskombinationen unterstützt. Wenn ich beispielsweise die Wörter „Linux“ in den Zeilen 1 bis 6 löschen möchte, dann:

# sed '1,6{/Linux/d;}' sed-demo.txt

Nach dem Löschen:
2 Unix-Betriebssystem
3 RHEL
4 Roter Hut
5 Fedora
7 CentOS
8 Debian
9. Ubuntu
10 openSUSE

Löschen Sie die Zeile mit „System“ und die folgende Zeile:

# sed '/System/{N;d;}' sed-demo.txt

Nach dem Löschen:
3 RHEL
4 Roter Hut
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9. Ubuntu
10 openSUSE

Zusammenfassen

Damit ist dieser Artikel über die Verwendung des sed-Befehls zum effizienten Löschen bestimmter Zeilen einer Datei abgeschlossen. Weitere Informationen zur Verwendung des sed-Befehls zum Löschen bestimmter Zeilen einer Datei finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung des Linux-Befehls sed (empfohlen)
  • sed-Befehl, um die Zeile zu finden, in der sich das Schlüsselwort befindet, und das erste Zeichen davor zu löschen
  • Detaillierte Erklärung der Verwendung von Sed-Befehlen und regulären Ausdrucksmetazeichen
  • Linux-Tutorial zum Ersetzen von Zeichenfolgen mit dem Befehl sed
  • Zeigen Sie den sed-Befehl des Systemprotokolls von einem bestimmten Zeitraum bis zur Gegenwart an
  • Ein Shell-Befehl pro Tag Linux-Reihe von Textinhaltsoperationen - ausführliche Erklärung des sed-Befehls
  • Verwendung des sed-Befehls unter Linux
  • Zusammenfassung der Verwendung und Vorsichtsmaßnahmen des sed-Befehls unter Linux
  • Häufig verwendete sed-Befehle in Linux
  • Verwenden Sie den Befehl sed, um die kv-Konfigurationsdatei in Linux zu ändern

<<:  Beispielcode einer in Vue3 gekapselten Lupenkomponente

>>:  Analyse der MySql CURRENT_TIMESTAMP-Funktion anhand eines Beispiels

Artikel empfehlen

So verwenden Sie den Linux-Befehl nl

1. Befehlseinführung nl (Anzahl der Zeilen) fügt ...

Webdesign-Tutorial (5): Visuelles Webdesign

<br />Vorheriger Artikel: Webdesign-Tutorial...

Docker installiert und führt den RabbitMQ-Beispielcode aus

Ziehen Sie das Bild: [mall@VM_0_7_centos ~]$ sudo...

Einführung in Who-Befehlsbeispiele in Linux

Über wen Zeigt die am System angemeldeten Benutze...

Detaillierte Schritte zur Verwendung von Redis in Docker

1. Einleitung Dieser Artikel zeigt Ihnen, wie Sie...

Verwenden Sie js, um js-Funktionen in Iframe-Seiten aufzurufen

In letzter Zeit habe ich jeden Tag an meinen Absch...

Implementierung des Pycharm-Installationstutorials auf Ubuntu 18.04

Methode 1: Pycharm herunterladen und installieren...

Einführung in die Verwendung von MySQL-Quellbefehlen

Inhaltsverzeichnis Gedanken, die durch eine Onlin...

JDBC-Erkundung SQLException-Analyse

1. Übersicht über SQLException Wenn bei der Verwe...

Der Unterschied zwischen br und br/ in HTML

Antwort von Stackflow: Einfaches <br> genügt...