Advertisements

Lernen Sie, den Sed-Texteditor zu verwenden

Erstellt für Version 7 des ursprünglichen Unix-Betriebssystems von AT&T, the sed Der Befehl ist seitdem wahrscheinlich in jedem Unix- und Linux-Betriebssystem enthalten. Der sed Anwendung ist eine Stream-Editor, und im Gegensatz zu einem Texteditor öffnet es keinen visuellen Puffer, in den die Daten einer Datei zur Verarbeitung geladen werden. Stattdessen verarbeitet 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

Wenn Sie Linux, BSD oder macOS verwenden, haben Sie bereits GNU oder BSD sed Eingerichtet. Dies sind zwei einzigartige Neuimplementierungen des Originals sed Befehl, und obwohl sie ähnlich sind, kann es kleine Unterschiede geben. GNU sed wird allgemein als das funktionsreichste angesehen sed da draußen, und es ist auf jeder dieser Plattformen weit verbreitet.

Wenn Sie GNU nicht finden können sed (oft angerufen gsed auf Nicht-Linux-Systemen), dann können Sie den Quellcode von der GNU-Website herunterladen. Das Schöne daran, GNU zu haben sed 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 zu entsprechen sed, falls Sie Portabilität benötigen.

Unter Windows können Sie GNU installieren sed mit Schoko.

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 gefüllt ist, folgen Sie Ihren Anweisungen sed werden hingerichtet. Manchmal sind Ihre Befehle bedingt und manchmal sind sie absolut, sodass die Ergebnisse dieser Befehle davon abhängen, wie Sie sie verwenden sed.

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 eine Datei oder sogar zurück in dieselbe Datei umgeleitet werden --in-place=.bak Möglichkeit.

Dann beginnt der Zyklus wieder mit der nächsten Eingabezeile.

Die Syntax für die sed Befehl ist:

$ sed --options [optional SCRIPT] [INPUT FILE or STREAM]

Finden Sie, 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 sagt sed 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. Denn sedDie Standardaktion von nach der Verarbeitung besteht auch darin, eine Zeile an zu drucken stdout, 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 Anleitung 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 in der letzten Zeile einer Datei arbeiten, 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.

Bei GNU sed, Sie können mehr als eine Zeile auswählen (sed '1,$p' druckt zum Beispiel die erste und letzte Zeile).

Negation

Jede Auswahl nach Nummer oder Position können Sie mit dem Ausrufezeichen (!) Charakter. Dadurch werden alle Zeilen ausgewählt außer die erste Zeile:

$ sed1!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 wie folgt vorstellen finden Betrieb in einer Textverarbeitung oder einem Browser. Sie geben ein Wort (a Muster), und die Ergebnisse werden ausgewählt. Die Syntax für eine Musterübereinstimmung 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.

Bearbeitung 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 durch sed mit Befehlen. Befehle ein sed sind anders als die sed selbst befehlen. Wenn es hilft, betrachte sie als „Aktionen“ oder „Verben“ oder „Anweisungen“.

Befehle ein sed sind einzelne Buchstaben, wie z p Pro 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

Der p Die Anweisung gibt aus, was sich gerade im Musterbereich befindet.

d für löschen

Der 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

Der s Der Befehl sucht nach einem Muster und ersetzt es durch etwas anderes. Dies ist wahrscheinlich die beliebteste und gelegentlichste Verwendung für sed, und es ist oft das erste (und manchmal das 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. Zum Beispiel, L wandelt den Ersetzungstext in Kleinbuchstaben und um l macht dasselbe für nur das nächste Zeichen. Es gibt andere, die in der aufgeführt sind sed Dokumentation (Sie können diese mit der info sed Befehl).

Der besondere Charakter & 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. Der g (Pro 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 umfassen 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.

Der w Flag, gefolgt von einem Dateinamen, schreibt eine übereinstimmende Zeile in eine Datei nur wenn eine Änderung erfolgt:

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

Flaggen 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 aufgabenorientiert sed Befehle zur Lösung allgemeiner Probleme. Allerdings lernen sed für sich selbst ermöglicht es Ihnen, Ihre eigenen Einzeiler zu schreiben, und diese können auf Ihre spezifischen Bedürfnisse zugeschnitten werden.

Skripte für sed können als Zeilen in einem Terminal geschrieben oder in einer Datei gespeichert und ausgeführt werden sed selbst. Ich neige dazu, kleine Skripte alle als einen Befehl zu schreiben, weil ich mich selten wiederverwende sed Befehle im wirklichen Leben. Wenn ich a schreibe sed 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 erteilen sed getrennt durch ein Semikolon (;).

$ sed ‘3t ; s/line/U&/’ example.txt
hello
world
This is LINE three.
This is the final line.

Bereichsänderungen mit geschweiften Klammern

Sie können auch einschränken, welche Ergebnisse mit geschweiften Klammern beeinflusst werden ({}). Beim Einschließen sed 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 zwingen sed um nur die letzte Zeile zu beeinflussen, indem die erforderliche Übereinstimmungsbedingung angegeben wird ($ um die letzte Zeile anzuzeigen) und das Platzieren der s Befehl, der ausgeführt werden soll, in geschweiften Klammern unmittelbar danach:

$ sed ‘$ {s/line/U&/}’ example.txt
hello
world
This is line three.
This is the final LINE.

Lernen Sie Sed

Sie können viel mehr damit machen sed als das, was in diesem Artikel erklärt wird. Ich bin noch nicht einmal zum Verzweigen gekommen (b), Prüfungen (t), das halt Platz (H) und viele andere Funktionen. Mögen ed, sed ist wahrscheinlich nicht der Texteditor, den Sie für die Dokumenterstellung 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 durch info Seiten von GNU sed, oder die Manpages von BSD sed, und finden Sie heraus, was sed kann für Sie tun.

Lernen Sie, den Sed-Texteditor zu verwenden

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top