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

Lernen Sie, den Sed-Texteditor zu verwenden

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.


Linux
  1. 6 Linux-Metazeichen, die ich gerne auf der Kommandozeile verwende

  2. So verwenden Sie den Linux-Befehl sed

  3. Bearbeiten von Text auf der Kommandozeile mit sed

  4. So verwenden Sie den Texteditor in InstantSite.

  5. Wie füge ich einen Text am Anfang einer Datei ein?

So verwenden Sie die Rechtschreibprüfungsfunktion im Vim-Texteditor

Bearbeiten von Text in der Befehlszeile mit grep

Micro – Ein befehlszeilenbasierter Texteditor für Linux

BENUTZUNG DES SED-EDITORS

So installieren Sie die neueste Version des Nano-Texteditors

So löschen Sie ausgewählten Text im vi-Editor