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 undd
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: