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

So verwenden Sie den Sed-Befehl unter Linux mit Beispielen

SED, abgekürzt als „Stream Editor“, ist ein leistungsstarker Text-Stream-Editor, der viele Funktionen für Dateien ausführen kann, darunter Suchen, Finden und Ersetzen sowie Einfügen. Der Befehl sed ist ein Befehl, der reguläre Ausdrücke unterstützt, was bedeutet, dass er die bereitgestellten regulären Ausdrücke verstehen kann.

SED wird jedoch hauptsächlich oder hauptsächlich für die Textsubstitution verwendet. Mit Hilfe von SED können wir Dateien bearbeiten, ohne sie zu öffnen, was viel schneller und schneller sein wird, etwas in einer Datei zu finden und zu ersetzen, anstatt die Datei zu öffnen und zu ändern.

In diesem Tutorial lernen wir den SED-Befehl mit benutzerfreundlichen und verständlichen Beispielen in unserer Linux-Shell kennen.

Sed-Befehlssyntax

Die Sed-Befehlssyntax ist ziemlich einfach zu verstehen, aber sehr leistungsfähig in der Anwendung. Hier ist die grundlegende Syntax von SED wie folgt:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Betrachten Sie die folgende Textdatei ('content.txt') als Eingabe für den sed-Beispielbefehl.

$ cat > content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

Hier sind die am häufigsten verwendeten sed-Beispiele wie folgt.

1. String ersetzen (Wörter oder Zeichen)

Sed kann verwendet werden, um eine Zeichenfolge (Wörter oder Zeichen) in der Eingabe zu suchen und zu ersetzen. Die Option s wird zum Ersetzen einer Zeichenfolge verwendet. Standardmäßig ersetzt der Befehl sed nur das erste Vorkommen der Zeichenfolge in einer Zeile.

Der folgende Befehl ersetzt das Wort „lorem“ durch „Lorem“ in der Datei „content.txt“ für das erste Vorkommen in jeder Zeile:

$ sed 's/lorem/Lorem/' content.txt

Hier ist 'lorem' der Suchstring und 'Lorem' der Ersetzungsstring.

Output
$ sed 's/lorem/Lorem/' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

2. Alle Vorkommen eines Strings in einer Datei ersetzen

Um alle Vorkommen einer Zeichenfolge in einer Datei zu suchen und zu ersetzen, verwenden Sie /g (globaler Ersatz) Flag.

Im folgenden Befehl /g Flag wird verwendet, um alle Vorkommen der Zeichenfolge „lorem“ durch „Lorem“ in der Datei „content.txt“ zu ersetzen.

$ sed 's/lorem/Lorem/g' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

3. Ersetzen des n-ten Vorkommens eines Musters in einer Zeile

Der sed-Befehl kann mit /1 verwendet werden ,/2 oder n (beliebige Zahl), um das erste, zweite oder n-te Vorkommen einer Zeichenkette in einer Zeile zu ersetzen.

Der folgende Befehl ersetzt das zweite (2) Vorkommen des Wortes „lorem“ in jeder Zeile durch „Lorem“.

$ sed 's/lorem/Lorem/2' content.txt

lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

Ähnlich wie beim Befehl tr kann sed alle Vorkommen von Zeichen in set1 durch die entsprechenden Zeichen in set2 ersetzen, indem y/set1/set2/ verwendet wird .

$ echo 'a for apple' | sed -e 'y/af/AF/
Output
A For Apple

4. Vom n-ten Vorkommen bis zu allen Vorkommen in jeder Zeile ersetzen

Wir können eine Kombination aus /1 verwenden ,/2 oder n (beliebige Zahl) und /g um alle Muster ab dem n-ten Vorkommen einer Zeichenkette in jeder Zeile zu ersetzen.

Im folgenden Beispiel werden alle Vorkommen der Zeichenfolge „lorem“ ab dem zweiten Vorkommen in jeder Zeile durch „Lorem“ ersetzt:

$ sed 's/lorem/Lorem/2g' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

5. Suchen und ersetzen Sie eine Zeichenfolge in einer bestimmten Zeilennummer

Mit sed können wir die Funktion darauf beschränken, den String nur in einer bestimmten Zeilennummer zu ersetzen.

Im folgenden Befehl können wir feststellen, dass nur die zweite Zeile durch die Zeichenfolge „Lorem“ ersetzt wird.

$ sed '2 s/lorem/Lorem/' content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

6. Teiltext einer Datei anzeigen

Mit dem Befehl sed können Sie einen Teil einer Datei anstelle der gesamten Datei anzeigen. Das -n Option wird verwendet, um das Drucken des gesamten Inhalts und p zu unterdrücken Option wird verwendet bestimmte Zeilen drucken.

Der folgende Befehl druckt die Zeilen 2 bis 4:

$ sed -n 2,4p content.txt
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

7. Alle Inhalte außer bestimmten Zeilen anzeigen

Der Befehl Sed ermöglicht die Anzeige des gesamten Inhalts der Datei mit Ausnahme bestimmter Zeilen. Zeigen Sie im folgenden Befehl den gesamten Inhalt der Datei „content.txt“ mit Ausnahme der Zeilen 1 und 2 an:

$ sed 1,2d content.txt
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

8. Alle Linien außer Mustervergleichslinie anzeigen

Wir können den folgenden sed-Befehl verwenden, um die Zeile zu löschen, die das erwähnte Suchmuster enthält. In der Ausgabe wird die Zeile mit „learn“ gelöscht, da sie auf das Suchmuster passt.

$ sed '/learn/d' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

9. Ersetzte Zeilen anzeigen

Um die ersetzten Zeilen zu drucken, verwenden wir /p Flag zusammen mit -n .

In der Ausgabe können wir sehen, dass die letzte Zeile nicht vorhanden ist, da sie nicht das Suchmuster „lorem“ hatte.

$ sed -n 's/lorem/Lorem/p' content.txt

Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

Weitere Beispiele für 'p'- und 'n'-Flag

Erste Zeile drucken

$ sed -n '1p' content.txt

Zeilenbereich drucken

$ sed -n '1,4p' content.txt

Drucken Sie mehrere Zeilen

$ sed -n '1p;4p' content.txt

Drucken Sie eine Datei

$ sed -n 'p' content.txt

Print enthält Regex oder Wort

$ sed -n '/RedHat/p' content.txt

Drucken, wenn Ziffern enthalten sind

$ sed -n '/[0-9]/p' content.txt

Regex abgleichen und ersetzen

$ sed -n 's/^L/Matched--&/p' content.txt
Output
Matched--Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Matched--Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Matched--Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.

Verwenden Sie sed wie grep

Der folgende sed-Befehl sucht nach dem Benutzer „root“ in der Datei „/etc/passwd“:

$ sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

10. Kombinieren Sie SED-Befehle

Wenn wir mehrere sed-Ausdrücke ausführen müssen, müssen wir e verwenden Option zum Verketten der sed-Befehle.

Nehmen wir ein Beispiel, um alle Vorkommen des "lorem" durch "Lorem" zu ersetzen und die Zeile zu löschen, die dem Suchmuster entspricht.

$ sed -e 's/lorem/Lorem/g' -e '/learn/d' content.txt

Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.

11. Leerzeile nach jeder Zeile einfügen

Mit G Option können Sie einzelne oder mehrere Leerzeilen in eine Datei einfügen.

Der folgende Befehl fügt eine einzelne Leerzeile zwischen den Zeilen ein:

$ sed G content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.

lorem ipsum is highly used by designers. lorem ipsum is great for developers.

lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

learn more about dummy text.

Führen Sie den folgenden Befehl aus, um zwei Leerzeilen einzufügen:

$ sed 'G;G' content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.

lorem ipsum is highly used by designers. lorem ipsum is great for developers.

lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

learn more about dummy text.

11. Bearbeiten und erstellen Sie eine Sicherungskopie der Originaldatei

Sed ermöglicht es, eine Datei zu bearbeiten und gleichzeitig eine Sicherungskopie der Originaldatei zu erstellen. Wir verwenden 'i.' für den Namen der Sicherungsdatei und -e bearbeiten.

Der folgende Befehl erstellt eine Sicherungskopie der Originaldatei „content.txt“ als „content.txt.bak“

$ sed -i.bak -e 's/lorem/Lorem/g' content.txt
Results
$ cat content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
$ cat content.txt.bak
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

12. Löschen einer Linie mit einem Muster

Mit diesem sed-Befehl können Sie eine Zeile löschen, die mit einer bestimmten Zeichenfolge beginnt und mit einer anderen Zeichenfolge endet. In der folgenden Ausgabe beginnt die Zeile mit „lorem“ und endet mit „text. wird gelöscht:

$ sed -e 's/^lorem.*text.$//g' content.txt
Output
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

13. String an Zeilen anhängen

Wir können den folgenden Befehl ausführen, um vor jeder Zeile mit Regex etwas Inhalt hinzuzufügen.

In der folgenden Ausgabe können wir sehen, dass „Here“ vor jeder Zeile hinzugefügt wird.

$ sed -e 's/.*/Here &/' content.txt
Here lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Here lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Here lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Here learn more about dummy text.

String vor jeder Zeile einfügen:

$ sed 'i \inserted line' content.txt
inserted line
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
inserted line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
inserted line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
inserted line
learn more about dummy text.

Zeichenfolge nach jeder Zeile anhängen:

$ sed 'a \Appended line' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Appended line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Appended line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Appended line
learn more about dummy text.
Appended line

14. Benutzernamen aus der /etc/passwd-Datei extrahieren

Der Sed-Befehl kann einfach verwendet werden, um die gesamte Liste aller Benutzernamen aus der Datei „/etc/passwd“ abzurufen.

Der folgende sed-Befehl extrahiert alle unter Linux verfügbaren Benutzernamen:

$ sed 's/\([^:]*\).*/\1/' /etc/passwd
root
daemon
bin
sys
sync
man
lp
news
uucp
proxy
backup
list
gnats
nobody
systemd-network
systemd-resolve
syslog
messagebus
uuidd
debian-spamd
admin

15. Zeile ohne kommentierte Zeilen (#) &Leerzeilen drucken

Drucken ohne kommentierte (#) Zeilen und Leerzeilen sind einfach mit sed.

Wir können den folgenden Befehl ausführen, um alle Zeilen zu drucken, die kein Kommentarsymbol (#) und alle leeren Zeilen enthalten.

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

So entfernen Sie nur kommentierte Zeilen:

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

16. Alle IP-Adressen mit sed aus einem String extrahieren

Sehen wir uns an, wie IP-Adressen mit dem Befehl sed mit Regex extrahiert werden. Ich habe zu Testzwecken ein paar IP-Adressen zu 'content.txt' hinzugefügt.

$ cat content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

Lassen Sie nun Regex verwenden, um die IP-Adresse wie folgt aus der Datei „content.txt“ zu extrahieren:

$ sed '/\n/!s/[0-9.]\+/\n&\n/;/^\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\n/P;D' content.txt
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

Ich habe einen anderen einfachen Befehl gefunden, um die gleichen Ergebnisse zu erzielen, siehe unten:

$ sed -n '/[0-9]/p' content.txt.bak
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

Wir können sed auch mit anderen Befehlen unter Verwendung von Pipes (|) kombinieren, siehe Beispiel unten:

$ ip addr | sed -n '/inet/p' | sed -e 's/  */ /g' | cut -d ' ' -f3
127.0.0.1/8
::1/128
75.208.225.10/24
2600:3c02::e03c:92ff:fe60:d7e2/64
fe80::f03c:92ef:fe60:d7e2/64

17. Umleiten und in eine Datei schreiben

Das w flag kann verwendet werden, um die Ausgabe in eine Datei zu schreiben, anstatt auf der Standardausgabe zu drucken. Das w Befehl erfordert einen Dateinamen, in den die Ausgabe geschrieben wird.

Der folgende sed-Befehl leitet die Ausgabe in eine neue Datei „rootpwd.txt“ um:

$ sed -n '/root/w rootpwd.txt' /etc/passwd
$ cat rootpwd.txt
root:x:0:0:root:/root:/bin/bash

Schlussfolgerung

In diesem Linux-Befehlstutorial haben wir die grundlegende Syntax des sed-Befehls und die am häufigsten und am häufigsten verwendeten sed-Beispiele gelernt. Man kann sed in Bash- oder Shell-Skripten verwenden, um verschiedene automatisierte Aufgaben bei der Textbearbeitung und sed-Operationen in der Linux-Shell auszuführen. Mit diesem Tutorial kann man sed leicht verstehen und bei Bedarf sofort mit der Implementierung beginnen. Wenn Sie Fragen, Anregungen oder Feedback haben, schreiben Sie diese bitte in das Kommentarfeld unten.


Linux
  1. Verwendung des Linux-Hexdump-Befehls mit praktischen Beispielen

  2. Verwendung von Pipes und Named Pipes unter Linux (mit Beispielen)

  3. SCP-Befehl in Linux:Verwendung mit Beispielen

  4. So verwenden Sie den Rmmod-Befehl unter Linux mit Beispielen

  5. Anhand von Beispielen wird die Verwendung des Vmstat-Befehls unter Linux erläutert

So verwenden Sie den who-Befehl in Linux mit Beispielen

Linux-Alias-Befehl:Verwendung mit Beispielen

So verwenden Sie den Gunzip-Befehl unter Linux mit Beispielen

So verwenden Sie den Linux-rm-Befehl mit Beispielen

So installieren und verwenden Sie den Ack-Befehl unter Linux mit Beispielen

So verwenden Sie den Sleep-Befehl unter Linux:Erklärt mit Beispielen