Erstellt für Version 7 des ursprünglichen Unix-Betriebssystems von AT&T, dem sed
Der Befehl ist seitdem wahrscheinlich in jedem Unix- und Linux-Betriebssystem enthalten. Der sed
Anwendung ist ein Stream-Editor , und im Gegensatz zu einem Texteditor öffnet es keinen visuellen Puffer, in den die Daten einer Datei zur Verarbeitung geladen werden. Stattdessen bearbeitet es eine Datei Zeile für Zeile, entweder gemäß einem in ein Terminal eingegebenen Befehl oder einer Reihe von Befehlen in einem Skript.
Installieren
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Wenn Sie Linux, BSD oder macOS verwenden, haben Sie bereits GNU oder BSD sed
Eingerichtet. Dies sind zwei einzigartige Neuimplementierungen des ursprünglichen sed
Befehl, und obwohl sie ähnlich sind, kann es kleine Unterschiede geben. GNU sed
wird allgemein als der funktionsreichste sed
angesehen da draußen und es ist auf jeder dieser Plattformen weit verbreitet.
Wenn Sie GNU sed
nicht finden können (oft als gsed
bezeichnet auf Nicht-Linux-Systemen), dann können Sie den Quellcode von der GNU-Website herunterladen. Das Schöne daran, GNU sed
zu haben installiert ist, dass es für seine zusätzlichen Funktionen verwendet werden kann, aber es kann auch eingeschränkt werden, um nur den POSIX-Spezifikationen von sed
zu entsprechen , falls Sie Portabilität benötigen.
Unter Windows können Sie GNU sed
installieren mit Chocolatey.
So funktioniert Sed
Der sed
Anwendung arbeitet jeweils in einer Zeile. Da es keine visuelle Anzeige hat, erstellt es einen Musterbereich – einen Bereich im Speicher, der die aktuelle Zeile aus dem Eingabestrom enthält (wobei alle nachgestellten Zeilenumbruchzeichen entfernt wurden). Sobald der Musterbereich ausgefüllt ist, werden Ihre Anweisungen sed
werden hingerichtet. Manchmal sind Ihre Befehle bedingt und manchmal absolut, sodass die Ergebnisse dieser Befehle davon abhängen, wie Sie sed
verwenden .
Wenn das Ende der Befehle erreicht ist, sed
gibt den Inhalt des Musterbereichs an den Ausgabestrom aus. Der Standardausgabestream ist stdout , aber es kann mithilfe von --in-place=.bak
zu einer Datei oder sogar zurück in dieselbe Datei umgeleitet werden Option.
Dann beginnt der Zyklus wieder mit der nächsten Eingabezeile.
Die Syntax für den sed
Befehl ist:
$ sed --options [optional SCRIPT] [INPUT FILE or STREAM]
Finden, was Sie bearbeiten möchten
In einem visuellen Editor finden Sie normalerweise das, was Sie in einer Textdatei ändern möchten, ohne groß darüber nachzudenken. Ihr Auge (oder Screenreader) scannt den Text, findet das Wort, das Sie ändern möchten, oder die Stelle, an der Sie Text einfügen oder entfernen möchten, und dann beginnen Sie einfach mit der Eingabe. Es gibt keinen interaktiven Modus für sed
, also müssen Sie ihm mitteilen, welche Bedingungen erfüllt sein müssen, damit er bestimmte Befehle ausführen kann.
Nehmen Sie für diese Beispiele an, dass eine Datei mit dem Namen example.txt
enthält diesen Text:
hello
world
This is line three.
Here is the final line.
Zeilennummer
Die Angabe einer Zeilennummer teilt sed
mit um nur auf dieser bestimmten Zeile in der Datei zu arbeiten.
Dieser Befehl wählt beispielsweise Zeile 1 einer Datei aus und gibt sie aus. Weil sed
Die Standardaktion von nach der Verarbeitung besteht auch darin, eine Zeile an stdout auszugeben , hat dies den Effekt, dass die erste Zeile dupliziert wird:
$ sed ‘1p’ example.txt
hello
hello
world
This is line three.
Here is the final line.
Sie können Zeilennummern auch in Schritten angeben. Zum Beispiel 1~2
gibt an, dass alle 2 Zeilen ausgewählt sind ("jede zweite Zeile beginnend mit der ersten auswählen"). Die Anweisung 1~3
bedeutet jede dritte Zeile nach der ersten auszuwählen:
$ sed ‘1p’ example.txt
hello
hello
world
This is line three.
Here is the final line.
Here is the final line.
Zeilenposition
Sie können nur die letzte Zeile einer Datei bearbeiten, indem Sie $
verwenden als Selektor:
$ sed ‘$p’ example.txt
hello
world
This is line three.
Here is the final line.
Here is the final line.
In GNU sed
, können Sie mehr als eine Zeile auswählen (sed '1,$p'
druckt zum Beispiel die erste und letzte Zeile).
Verneinung
Jede Auswahl nach Nummer oder Position können Sie mit dem Ausrufezeichen (!
) invertieren ) Charakter. Dadurch werden alle Zeilen außer ausgewählt die erste Zeile:
$ sed ‘1!p’ example.txt
hello
world
world
This is line three.
This is line three.
Here is the final line.
Here is the final line.
Musterabgleich
Sie können sich eine Musterübereinstimmung als Suche vorstellen Betrieb in einer Textverarbeitung oder einem Browser. Sie geben ein Wort (ein Muster) an ), und die Ergebnisse werden ausgewählt. Die Syntax für einen Musterabgleich lautet /pattern/
.
$ sed ‘/hello/p’ example.txt
hello
hello
world
This is line three.
Here is the final line.
$ sed ‘/line/p’ example.txt
hello
world
This is line three.
This is line three.
Here is the final line.
Here is the final line.
Bearbeiten mit Sed
Sobald Sie gefunden haben, was Sie bearbeiten möchten, können Sie jede gewünschte Aktion ausführen. Sie führen Bearbeitungen mit sed
durch mit Befehlen. Befehle in sed
unterscheiden sich von sed
selbst befehlen. Wenn es hilft, stellen Sie sie sich als "Aktionen" oder "Verben" oder "Anweisungen" vor.
Befehle in sed
sind einzelne Buchstaben, z. B. p
zum Drucken Befehl, der in den vorherigen Beispielen verwendet wurde. Anfangs kann es schwierig sein, sich an sie zu erinnern, aber wie bei allem lernt man sie mit etwas Übung kennen.
p für Druck
Das p
Anweisung gibt aus, was gerade im Musterbereich enthalten ist.
d für löschen
Das d
Anweisung löscht den Musterbereich.
$ sed ‘$d’ example.txt
hello
world
This is line three.
$ sed ‘1d’ example.txt
world
This is line three.
Here is the final line.
s für Suchen und Ersetzen
Die s
Der Befehl sucht nach einem Muster und ersetzt es durch etwas anderes. Dies ist wahrscheinlich die beliebteste und beiläufigste Verwendung für sed
, und es ist oft der erste (und manchmal der einzige) sed
Befehl, den ein Benutzer lernt. Es ist mit ziemlicher Sicherheit der nützlichste Befehl für die Textbearbeitung.
$ sed ‘s/world/opensource.com/’
hello
opensource.com
This is line three.
Here is the final line.
Es gibt spezielle Funktionen, die Sie auch in Ihrem Ersetzungstext verwenden können. Beispiel: \L
wandelt den Ersetzungstext in Kleinbuchstaben und \l
um macht dasselbe für nur das nächste Zeichen. Es gibt noch andere, die im sed
aufgelistet sind Dokumentation (Sie können diese mit info sed
einsehen Befehl).
Das Sonderzeichen &
in der Ersetzungsklausel bezieht sich auf das übereinstimmende Muster:
$ sed ‘s/is/\U&/’ example.txt
hello
world
ThIS is line three.
Here IS the final line.
Sie können auch spezielle Flags übergeben, um zu beeinflussen, wie s
verarbeitet, was er findet. Das g
(für global , vermutlich) Flag sagt s
So wenden Sie die Ersetzung auf alle in der Zeile gefundenen Übereinstimmungen an und nicht nur auf die erste Übereinstimmung:
$ sed ‘s/is/\U&/g’ example.txt
hello
world
ThIS IS line three.
Here IS the final line.
Andere wichtige Flags enthalten eine Zahl, die angibt, welches Vorkommen eines übereinstimmenden Musters beeinflusst werden soll:
$ sed ‘s/is/\U&/2’ example.txt
hello
world
This IS line three.
Here is the final line.
The w
Flag, gefolgt von einem Dateinamen, schreibt nur wenn eine übereinstimmende Zeile in eine Datei eine Änderung vorgenommen wird:
$ sed ‘s/is/\U&/w sed.log’ example.txt
hello
world
ThIS is line three.
Here IS the final line.
$ cat sed.log
ThIS is line three.
Here IS the final line.
Flags können kombiniert werden:
$ sed ‘s/is/\U&/2w sed.log’ example.txt
hello
world
This IS line three.
Here is the final line.
$ cat sed.log
This IS line three.
Skripte
Es gibt viele tolle Seiten da draußen mit sed
„Einzeiler“. Sie geben Ihnen aufgabenorientierte sed
Befehle zur Lösung allgemeiner Probleme. Lernen Sie jedoch sed
für sich selbst ermöglicht es Ihnen, Ihre eigenen Einzeiler zu schreiben, die auf Ihre speziellen Bedürfnisse zugeschnitten werden können.
Skripte für sed
können als Zeilen in einem Terminal geschrieben oder in einer Datei gespeichert und mit sed
ausgeführt werden selbst. Ich neige dazu, kleine Skripte alle als einen Befehl zu schreiben, weil ich sed
selten wiederverwende Befehle im wirklichen Leben. Wenn ich einen sed
schreibe Skript, es ist normalerweise sehr spezifisch für eine Datei. Nachdem ich beispielsweise den ersten Entwurf dieses Artikels geschrieben hatte, verwendete ich sed
die Großschreibung von "sed" zu standardisieren, und das ist eine Aufgabe, die ich wahrscheinlich nie wieder tun muss.
Sie können eine Reihe unterschiedlicher Befehle an sed
erteilen durch ein Semikolon getrennt (;
).
$ sed ‘3t ; s/line/\U&/’ example.txt
hello
world
This is LINE three.
This is the final line.
Umfangsänderungen mit geschweiften Klammern
Sie können auch mit geschweiften Klammern einschränken, welche Ergebnisse betroffen sind ({}
). Wenn Sie sed
einschließen Befehle in geschweiften Klammern, gelten sie nur für eine bestimmte Auswahl. Beispielsweise erscheint das Wort "Zeile" in zwei Zeilen des Beispieltextes. Sie können sed
erzwingen um nur die letzte Zeile zu beeinflussen, indem die erforderliche Übereinstimmungsbedingung angegeben wird ($
um die letzte Zeile anzuzeigen) und Platzieren der s
Befehl, der ausgeführt werden soll, unmittelbar danach in geschweiften Klammern:
$ sed ‘$ {s/line/\U&/}’ example.txt
hello
world
This is line three.
This is the final LINE.
Sed lernen
Mit sed
können Sie noch viel mehr machen als das, was in diesem Artikel erklärt wird. Ich bin noch nicht einmal zum Verzweigen gekommen (b
), Tests (t
), die Halten Leerzeichen (H
) und viele andere Funktionen. Wie ed
, sed
ist wahrscheinlich nicht der Texteditor, den Sie für die Dokumentenerstellung oder sogar für jede Skriptaufgabe verwenden werden, die Sie erledigen müssen, aber es ist eine leistungsstarke Option, die Sie als POSIX-Benutzer haben. Lernen, wie sed
Befehle strukturiert sind und wie kurze Skripte geschrieben werden, können schnelle Änderungen an riesigen Textmengen ermöglichen. Lesen Sie die info
durch Seiten von GNU sed
, oder die Manpages von BSD sed
, und finden Sie heraus, was sed
ist kann für Sie tun.