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 wird mir nur Debian und Kubuntu zeigen

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 um zu beseitigen, wissen wir bereits, wie man es mit sed 😉 macht

Grüße


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   mss-devel sagte

    Sehr guter Beitrag 😉

    1.    KZKG ^ Gaara sagte

      dank

      Übrigens, wir haben Ihre E-Mail jetzt erhalten. Ich werde Ihnen antworten

      Grüße

  2.   namenlos sagte

    Als Hohepriester des Terminals, der Server und der SSH-Verbindungen komme ich zu Ihnen, oh großartiger KZKG ^ Gaara, und ich frage Sie: Wo kann ich ein Tutorial auf der Ebene meiner Unwissenheit erhalten, das es mir ermöglicht, SSH-Verbindungen zwischen zwei Remotecomputern in verschiedenen Netzwerken zum Teilen zu verwenden? Textdateien, PDF, Bild und Ton (mp3)….

    🙂

    Im Ernst, können Sie mich in dieser Hinsicht leiten? Ich habe zwei Maschinen, eine bei der Arbeit und eine zu Hause, und ich brauche eine SSH-Verbindung zwischen ihnen (denn nach meinem Verständnis ermöglicht SSH die gemeinsame Nutzung von Inhalten zwischen Maschinen, habe ich Recht?
    Und wenn ich falsch liege, welche Anwendung empfehlen Sie?
    Und wo finde ich diesbezüglich ein grundlegendes Tutorial?

    1.    -spionier- sagte

      scp

      scp user @ machine_address: path user @ machine_address: path.

      Gleiche Syntax wie cp, source -> destination.

  3.   f3niX sagte

    Du bist aufgetaucht, Mann, du warst verloren.

  4.   Joaquin sagte

    Guter Tipp!

  5.   LycusHackerEmo sagte

    Interessanter Tipp… xD

    Kennen Sie einen, der fett gedruckten Text hervorhebt?
    Ich meine, ich habe eine txt-Datei, die ein Wörterbuch ist, mehr als 10000 Zeilen enthält, und ich möchte, dass sie bestimmten Text vor den ":" - Suspendierungspunkten hervorhebt, und es ist zu viel, ihn einzeln auszuführen.

    1.    KZKG ^ Gaara sagte

      Hallo,

      Eine txt-Datei ist einfacher Text, wie der Name schon sagt ... einfach, ohne Formate oder ähnliches. Es tut mir leid, aber ich glaube nicht, dass das, was Sie fragen, getan werden kann, oder? 🙁

      Grüße

      1.    aca sagte

        Eigentlich kann es, aber Sie müssten das Zielformat kennen.
        Sport:
        echo $ (echo "Robert: Hallo. Hier ändern" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        es ist eine Frage der Bewältigung.
        Die andere Möglichkeit zum Löschen, die verwendet werden kann, ist sed '/' $ 1 '/ d', aber Sie müssen sich der Re sicher sein.

        1.    LycusHackerEmo sagte

          Speichern Sie es anschließend in * .odt

          Gibt es nicht einen einfacheren Weg, dies mit LibreOffice zu tun?

  6.   Lolo sagte

    Könnten Sie einen Teil einer Zeile löschen und den Rest verlassen?

    Angenommen, ich möchte alles vor einem Wort in einer bestimmten Zeile löschen.

    Oder löschen Sie alles, was diesem Wort folgt.

    1.    aca sagte

      Ja, es geht darum, einen regulären Ausdruck zu ziehen (falls erforderlich, Mann sed -r, –regexp-erweitert)
      Ausgehend von dem, was ich finde
      echo «Robert: Hallo. Hier ändern »| sed 's / Change //'
      mit einem genau definierten Muster und mit. (ein Zeichen) und * (mehr als ein Zeichen)
      Nach:
      echo «Robert: Hallo. Hier ändern »| sed 's / Change. * //'
      Vorher:
      echo «Robert: Hallo. Hier ändern »| sed 's /. * Change //'
      Wenn es darauf ankommt, dass das Wort erscheint
      echo «Robert: Hallo. Hier ändern »| sed 's / Change. * / Change /'
      oder ausführlicher
      in der Zeile mit Robert, was nach Change geht
      echo -e «Fritz: Hallo. Hier ändern \ nRobert: Hallo. Hier ändern »| sed '/Robert/s/Cambio.*//'
      oder wie am Anfang die zweite Zeile herausnehmen und den Rest verarbeiten
      echo -e «Fritz: Hallo. Hier ändern \ nRobert: Hallo. Hier ändern \ nAndere »| sed -e 2d -e 's / Change. * //'
      echo -e «Fritz: Hallo. Hier ändern \ nRobert: Hallo. Hier ändern \ nAndere »| sed '2d; s / Change. * //'

      1.    Lolo sagte

        Danke, es ist sehr nützlich für mich.

  7.   MSX sagte

    Schöner Artikel, von dem ich mag, wie toll der SysAdmin!
    Was wäre unser Leben ohne Sed, Awek, Perl, Grep, Schwanz, Kopf, "Emacs" und so viele andere wichtige Werkzeuge !?

  8.   Lisbeth Ollarve sagte

    Danke, es war sehr hilfreich.

  9.   Stifte sagte

    Hallo, und wie können Sie die Zeilen 1,4 und 10 mit demselben Befehl aus einer Datei löschen?