Der Sed-Befehl oder Stream Editor ist ein sehr mächtiges Dienstprogramm, das von Linux/Unix-Systemen angeboten wird. Es wird hauptsächlich zum Ersetzen von Text, Finden & Ersetzen verwendet, kann aber auch andere Textmanipulationen wie Einfügen, Löschen, Suchen usw. durchführen. Mit SED können wir komplette Dateien bearbeiten, ohne sie tatsächlich öffnen zu müssen. Sed unterstützt auch die Verwendung von regulären Ausdrücken, was sed zu einem noch mächtigeren Werkzeug zur Textmanipulation macht.

In diesem Artikel werden wir anhand einiger Beispiele lernen, den Befehl SED zu verwenden. Die grundlegende Syntax für die Verwendung des sed-Befehls lautet,

sed OPTIONS…

Sed-Befehlsoptionen

Nun sehen wir uns einige Beispiele an.

Beispiel :1) Einen Teil des Textes einer Datei anzeigen

Mit sed können wir nur einen Teil einer Datei anzeigen, anstatt die ganze Datei zu sehen. Um einige Zeilen der Datei zu sehen, verwenden Sie den folgenden Befehl,

$ sed -n 22,29p testfile.txt

hier unterdrückt die Option ’n‘ die Ausgabe der gesamten Datei,& die Option ‚p‘ gibt nur die Zeilen von 22 bis 29 aus.

Beispiel :2) Alles bis auf einige Zeilen anzeigen

Um den gesamten Inhalt einer Datei bis auf einen Teil anzuzeigen, verwenden Sie den folgenden Befehl,

$ sed 22,29d testfile.txt

Option ‚d‘ entfernt die genannten Zeilen aus der Ausgabe.

Beispiel :3) Jede 3. Zeile ab der N-ten Zeile anzeigen

Um den Inhalt jeder 3. Zeile ab der Zeilennummer 2 oder einer beliebigen anderen Zeile anzuzeigen, verwenden Sie den folgenden Befehl

$ sed -n '2~3p' file.txt

Beispiel :4 ) Löschen einer Zeile mit dem sed-Befehl

Um eine Zeile mit sed aus einer Datei zu löschen, verwenden Sie den folgenden Befehl,

$ sed Nd testfile.txt

wobei ‚N‘ die Zeilennummer ist& die Option ‚d‘ löscht die genannte Zeilennummer. Um die letzte Zeile der Datei zu löschen, verwenden Sie

$ sed $d testfile.txt

Beispiel :5) Löschen eines Bereichs von Zeilen

Um einen Bereich von Zeilen aus der Datei zu löschen, führen Sie

$ sed '29,34d' testfile.txt

Dies löscht die Zeilen 29 bis 34 aus der Datei testfile.txt.

Beispiel :6) Löschen von anderen als den erwähnten Zeilen

Um andere als die erwähnten Zeilen aus einer Datei zu löschen, verwenden wir ‚!‘

$ sed '29,34!d' testfile.txt

Hier wird die Option ‚!‘ verwendet, so dass die Bedingung umgekehrt wird, d.h. die erwähnten Zeilen werden nicht gelöscht. Alle Zeilen außer 29-34 werden aus der Datei testfile.txt gelöscht.

Beispiel :7) Hinzufügen von Leerzeilen/Leerzeichen

Um nach jeder nicht-leeren Zeile eine Leerzeile einzufügen, verwenden wir die Option ‚G‘,

$ sed G testfile.txt

Beispiel :8) Suchen und Ersetzen einer Zeichenkette mit sed

Um &eine Zeichenkette aus der Datei zu suchen und zu ersetzen, verwenden wir das folgende Beispiel,

$ sed 's/danger/safety/' testfile.txt

hier sucht die Option ’s‘ das Wort ‚Gefahr‘ & und ersetzt es in jeder Zeile nur beim ersten Vorkommen durch ‚Sicherheit‘.

Beispiel :9) Suchen und Ersetzen einer Zeichenkette aus der gesamten Datei mit sed

Um das Wort komplett aus der Datei zu ersetzen, verwenden wir die Option ‚g‘ mit ’s‘,

$ sed 's/danger/safety/g' testfile.txt

Beispiel :10) Ersetzen des n-ten Vorkommens eines Stringmusters

Wir können auch einen String beim n-ten Vorkommen aus einer Datei ersetzen. Ersetzen Sie z.B. ‚Gefahr‘ durch ‚Sicherheit‘ nur beim zweiten Vorkommen,

$ sed ‘s/danger/safety/2’ testfile.txt

Um ‚Gefahr‘ beim 2. Vorkommen jeder Zeile aus der ganzen Datei zu ersetzen, verwenden Sie

$ sed 's/danger/safety/2g' testfile.txt

Beispiel :11) Ersetzen einer Zeichenkette in einer bestimmten Zeile

Um eine Zeichenkette nur in einer bestimmten Zeile zu ersetzen, verwenden Sie

$ sed '4 s/danger/safety/' testfile.txt

Damit wird nur die Zeichenkette ab der 4. Zeile der Datei ersetzt. Wir können auch einen Bereich von Zeilen anstelle einer einzelnen Zeile angeben,

$ sed '4,9 s/danger/safety/' testfile.txt

Beispiel :12) Eine Zeile nach/vor dem Suchmuster hinzufügen

Um nach jedem Suchmuster eine neue Zeile mit einem bestimmten Inhalt hinzuzufügen, verwenden Sie die Option ‚a‘,

$ sed '/danger/a "This is new line with text after match"' testfile.txt

Um vor jedem Suchmuster eine neue Zeile mit einem bestimmten Inhalt hinzuzufügen, verwenden Sie die Option ‚i‘,

$ sed '/danger/i "This is new line with text before match" ' testfile.txt

Beispiel :13) Ändern einer ganzen Zeile bei übereinstimmendem Muster

Um eine ganze Zeile in eine neue Zeile zu ändern, wenn ein Suchmuster übereinstimmt, müssen wir die Option ‚c‘ mit sed verwenden,

$ sed '/danger/c "This will be the new line" ' testfile.txt

So wird bei Übereinstimmung mit dem Muster ‚danger‘ die ganze Zeile in die genannte Zeile geändert.

Erweiterte Möglichkeiten mit sed

Bis jetzt haben wir nur einfache Ausdrücke mit sed verwendet, jetzt werden wir einige fortgeschrittene Anwendungen von sed mit regex besprechen,

Beispiel :14) Mehrere sed-Befehle ausführen

Wenn wir mehrere sed-Ausdrücke ausführen müssen, können wir die Option ‚e‘ verwenden, um die sed-Befehle zu verketten,

$ sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt

Beispiel :15) Erstellen einer Sicherungskopie vor dem Bearbeiten einer Datei

Um eine Sicherungskopie einer Datei zu erstellen, bevor wir sie bearbeiten, verwenden Sie die Option ‚-i.bak‘,

$ sed -i.bak -e 's/danger/safety/g' testfile.txt

Damit wird eine Sicherungskopie der Datei mit der Erweiterung .bak erstellt. Sie können auch eine andere Erweiterung verwenden, wenn Sie möchten.

Beispiel :16) Löschen einer Dateizeile, die mit & beginnt und mit einem Muster endet

Um eine Zeile zu löschen, die mit einer bestimmten Zeichenfolge & beginnt und mit einer anderen Zeichenfolge endet, verwenden

$ sed -e 's/^danger.*stops$//g' testfile.txt

Damit wird die Zeile mit ‚danger‘ am Anfang & ’stops‘ am Ende & gelöscht, es können beliebig viele Wörter dazwischen stehen, ‚.*‘ definiert diesen Teil.

Beispiel :17) Zeilen anhängen

Um vor jeder Zeile mit sed & regex etwas Inhalt hinzuzufügen, verwenden Sie

$ sed -e 's/.*/testing sed &/' testfile.txt

So wird nun jeder Zeile ‚testing sed‘ vorangestellt.

Beispiel :18) Entfernen aller kommentierten Zeilen & leere Zeilen

Um alle kommentierten Zeilen zu entfernen, d.h. Zeilen mit # & alle leeren Zeilen, verwenden Sie

$ sed -e 's/#.*//;/^$/d' testfile.txt

Um nur kommentierte Zeilen zu entfernen, verwenden Sie

$ sed -e 's/#.*//' testfile.txt

Beispiel :19) Liste aller Benutzernamen aus /etc/passwd holen

Um die Liste aller Benutzernamen aus der Datei /etc/passwd zu holen, verwenden Sie

$ sed 's/\(*\).*/\1/' /etc/passwd

Eine komplette Liste aller Benutzernamen wird als Ausgabe auf dem Bildschirm erzeugt.

Beispiel :20) Überschreiben von Systemlinks mit dem sed-Befehl verhindern

Der Befehl ’sed -i‘ ist dafür bekannt, dass er Systemlinks entfernt & und nur reguläre Dateien anstelle der Link-Datei erzeugt. Um eine solche Situation zu vermeiden, & verhindern Sie, dass ’sed -i‘ die Links zerstört, indem Sie die Option ‚-follow-symklinks‘ mit dem auszuführenden Befehl verwenden.

Angenommen, ich möchte SELinux auf CentOS oder RHEL Severs deaktivieren

# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

Schreibe einen Kommentar

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