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

Löschen bestimmter Zeilen aus einer Datei in der Linux-Befehlszeile

Die Aufgabe ist einfach. Sie müssen bestimmte Zeilen aus einer Textdatei im Linux-Terminal löschen.

Sie können einen Texteditor wie Vim oder Nano verwenden, die Datei eingeben und die gewünschten Zeilen löschen. Dieser Ansatz ist jedoch nicht für die Automatisierung mit Bash-Skripten geeignet.

Stattdessen können Sie den leistungsstarken sed-Befehlszeileneditor verwenden und Zeilen löschen, die bestimmten Kriterien entsprechen. Und natürlich können Sie sed in Ihren Shell-Skripten verwenden.

Lassen Sie mich einige Anwendungsfälle zeigen.

⚠️Die hier gezeigten Beispiele ändern die Originaldatei sofort. Es wäre eine gute Idee, eine Sicherungskopie dieser Datei zu erstellen, bevor Sie damit beginnen, damit zu experimentieren.

Entferne die n-te Zeile aus der Datei

Stellen Sie sich vor, Sie müssen die 7. Zeilennummer in einer Datei löschen. Sie können den sed-Befehl wie folgt verwenden:

sed -i '7d' filename

Lassen Sie mich erklären, wie es funktioniert:

  • -i :Diese Option aktiviert die direkte Bearbeitung. Standardmäßig zeigt sed nur die Ausgabe an. Mit diesem -i Option, ändert sie die eigentliche Datei, ohne sie auf dem Display anzuzeigen.
  • 7d :Hier ist 7 die Zeilennummer und d weist das Löschen der Zeile an.
  • filename :Dies ist die Datei, die Sie ändern möchten. Sie können auch einen absoluten oder relativen Pfad angeben, wenn sich die Datei in einem anderen Verzeichnis befindet.

Lassen Sie es mich anhand eines realen Beispiels zeigen. Hier ist eine Beispieltextdatei namens agatha.txt:

The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
Giant's Bread
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies

Um die vierte Zeile aus dieser Datei zu entfernen, verwende ich:

sed '4d' agatha.txt

Dies führt zu der folgenden Anzeige, bei der die Zeile „Riesenbrot“ entfernt ist:

The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies

Angenommen, Sie möchten die erste Zeile der Datei in der Linux-Befehlszeile entfernen. Verwenden Sie sed wie folgt:

sed -i '1d' filename
💡Wenn Sie das Ergebnis der Manipulation sehen möchten, ohne die Datei selbst zu ändern, verwenden Sie nicht das -i Option des sed-Befehls.

Entferne die letzte Zeile mit sed

Sie haben gelernt, eine bestimmte Zeile zu löschen, aber was ist, wenn Sie die letzte Zeile entfernen müssen?

Sie können immer die Gesamtzahl der Zeilen in einer Datei mit dem Befehl wc abrufen und diese Zahl mit sed verwenden. sed hat jedoch eine spezielle Möglichkeit, die letzte Zeile einer Datei zu löschen. Sie müssen sich jetzt keine Gedanken mehr über die Anzahl der Dateien machen.

sed -i '$d' filename.txt

Einen Zeilenbereich löschen

Ähnlich wie Sie es bereits gesehen haben, können Sie auch eine Reihe von Zeilen aus der Datei löschen.

Angenommen, Sie müssen die Zeilen von 11 bis 15 löschen, dann können Sie den Bereich wie folgt angeben:

sed -i '11,15d' filename

Beachten Sie, dass es auch die Zeilen 11 und 15 entfernt, nicht nur die Zeilen, die dazwischen liegen.

Zeilen entfernen, die einen String enthalten

Sie können auch sed verwenden, um alle Zeilen zu löschen, die eine bestimmte Zeichenfolge enthalten oder mit einem bestimmten Muster übereinstimmen.

Der folgende Befehl löscht alle Zeilen, die das Wort 'string' enthalten:

sed -i '/string/d' filename

Beachten Sie, dass bei dieser Suche zwischen Groß- und Kleinschreibung unterschieden wird. Sie können anstelle einer regulären Zeichenfolge auch ein Regex-Muster verwenden.

Zeilen entfernen, die mit einem Wort beginnen

Wenn Sie alle Zeilen entfernen möchten, die mit einem bestimmten Wort oder Buchstaben beginnen, müssen Sie nur das Regex-Muster wie folgt angeben:

sed -i '/^word/d' filename

Bonus-Tipp:Entfernen Sie alle leeren Zeilen

Bevor ich diesen Artikel beende, lassen Sie mich kurz erläutern, wie Sie alle leeren Zeilen mit sed entfernen können:

sed -i '/^$/d' filename

Ich hoffe, Sie finden diesen schnellen Tipp hilfreich beim Entfernen von Zeilen aus Textdateien in der Linux-Befehlszeile.

Wenn Sie interessiert sind, erfahren Sie mehr über den sed-Befehlszeilen-Editor:


Linux
  1. So löschen Sie Dateien und Verzeichnisse in Linux über die Befehlszeile

  2. Durchsuchen Sie Torrents von der Befehlszeile in Linux

  3. So teilen und kombinieren Sie Dateien von der Befehlszeile in Linux

  4. sed-Befehlsbeispiele unter Linux

  5. Schneller Unix-Befehl zum Anzeigen bestimmter Zeilen in der Mitte einer Datei?

So extrahieren oder entpacken Sie tar.gz-Dateien von der Linux-Befehlszeile

Befehl Einfügen unter Linux (Zeilen zusammenführen)

Diff-Befehl in Linux mit Beispielen

Kopieren Sie eine Datei in mehrere Verzeichnisse von der Befehlszeile unter Linux

So mischen Sie Zeilen in einer Datei unter Linux

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl