So löschen Sie bestimmte Zeilen mit sed aus einer Datei

In bestimmten Fällen müssen wir eine bestimmte Zeile aus einer oder mehreren Dateien löschen. Beispielsweise ist mir passiert, dass ich eine ganze Liste von Dateien hatte und Zeile 27 von all diesen löschen muss (Zeile 27 ist die einer ACL , Norm, Regel, Konfiguration), entweder kann ich Datei für Datei bearbeiten oder ich kann mit dem Befehl einfach das erreichen, was ich brauche Durst und ein Bash-Skript (optional).

Aber versuchen wir es mit einer einzelnen Datei.

Wir haben die Datei distros-deb.txt welches dies enthält:

Debian

kubuntu

Archlinux

Lösungen

Minze

Mit anderen Worten, die Datei distros-deb.txt Hier werden wir die Debian-basierten Distributionen einfügen, aber dort sehen wir, dass es in Zeile 3 "archlinux" gibt, eine Distribution, die offensichtlich nichts mit Debian zu tun hat, also müssen wir diese Zeile entfernen. Um Zeile 3 dieser Datei zu entfernen, setzen wir Folgendes:

sed "3d" distros-deb.txt > distros-deb-ok.txt

Diese Zeile zu erklären ist mit etwas einfach durstiges "3d" Wir geben an, dass wir Zeile 3 mit löschen werden distros-deb.txt Wir geben an, an welcher Datei gearbeitet werden soll, dh löschen Sie Zeile 3 dieser Datei. Wenn Sie bis hierher die Eingabetaste drücken , wird angezeigt, was wir möchten, aber im Terminal, also mit > distros-deb-ok.txt Wir geben an, dass das Ergebnis nicht im Terminal angezeigt, sondern in einer Datei mit diesem Namen abgelegt wird.

Was ist einfach?

Wir können auch die Verwendung von vermeiden > distros-deb-ok.txt unter Verwendung eines geeigneten Parameters von Durst, der Parameter -i

Das heißt, falls wir die Zeile aus der Datei entfernen und unter demselben Namen speichern möchten (und nicht in einer anderen Datei), fügen Sie einfach den Parameter hinzu -i :

sed -i "3d" distros-deb.txt

Dadurch wird Zeile 3 aus distros-deb.txt entfernt und gespeichert.

Was ist, wenn ich einen Zeilenbereich möchte, dh Zeile 3, aber auch Zeile 4 und 5 entfernen soll? Um dies zu erreichen, setzen wir den Bereich von 3 bis 5, dh:

sed -i "3,5d" distros-deb.txt

Und es werden mir nur Debian und Kubuntu angezeigt 

Was ist, wenn ich von Zeile 2 bis zur letzten löschen möchte, wenn ich die Gesamtzahl der Zeilen nicht kenne?

Verwenden Sie einfach das Dollarsymbol - »$

sed -i "2,$d" distros-deb.txt

Wenn Sie von der ersten Zeile bis # 4 entfernen möchten, setzen wir einfach den Wert 1 an den Anfang:

sed -i "1,4d" distros-deb.txt

Dies war alles, ein sehr nützlicher Tipp, wenn Sie Bash-Skripte erstellen möchten, um Aufgaben zu automatisieren, und Sie Zeilen von Konfigurationsdateien ändern und entfernen müssen, um Änderungen vorzunehmen, die wir verwenden können Durst o perl, sowie zum Eliminieren wissen wir bereits, wie es mit sed  geht

Grüße


Als bevorzugte Quelle in Google hinzufügen