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.-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.