Sed

sed (Strom-Redakteur) ist ein Dienstprogramm von Unix, das Text grammatisch analysiert und eine Programmiersprache durchführt, die Transformationen auf solchen Text anwenden kann. Es liest Eingangslinie durch die Linie (folgend), die Operation anwendend, die über die Befehl-Linie (oder eine sed Schrift), und dann Produktionen die Linie angegeben worden ist. Es wurde von 1973 bis 1974 als ein Dienstprogramm von Unix von Lee E. McMahon von Glockenlaboratorien entwickelt, und ist heute für am meisten Betriebssysteme verfügbar.

Geschichte

sed ist einer der sehr frühen für die Befehl-Linienverarbeitung von Datendateien gebauten Befehle von Unix. Es hat sich als der natürliche Nachfolger des populären Grep-Befehls entwickelt. Vetter zu später erlaubt AWK, sed starken und interessanten Daten, die in einer Prozession gehen, durch Schale-Schriften getan zu werden.

sed und AWK werden häufig als die Ahnen und Inspiration für Perl zitiert. Der s / / / Syntax, die unten gezeigt ist, ist ein Teil der Syntax von Perl und hervorgebracht mit der Hrsg., dem Vorgänger zu sed.

die Sprache von sed hat Variablen nicht und hat nur primitiven GOTO und sich verzweigende Funktionalität; dennoch ist die Sprache Turing-abgeschlossen.

GNU sed hat mehrere neue Eigenschaften hinzugefügt. Das am besten bekannte editiert im Platz Dateien (d. h., ersetzen Sie die ursprüngliche Datei durch das Ergebnis, das sed Programm anzuwenden), der später in BSD sed auch eingeschlossen wurde. Diese Eigenschaft wird heutzutage häufig statt Hrsg.-Schriften verwendet: zum Beispiel,

sed-i 's/abc/def /' Datei (verlangt der BSDs eine Erweiterung mit der-i Fahne, z.B sed-i.bak 's/abc/def /' Datei)

Zeichen: "Sed-i" überschreibt die ursprüngliche Datei mit einer neuen, irgendwelche Verbindungen brechend, die das Original gehabt haben kann, während das obengenannte Beispiel mit "der Hrsg." nur den Inhalt der ursprünglichen Datei ändert, Dateiverbindungen bewahrend. Bemerken Sie, dass, wenn man-i'extension' die ursprüngliche Datei verwenden wird, durch die Umbenennung davon mit der gegebenen Erweiterung bewahrt wird. Bemerken Sie auch, dass ein Raum zwischen "-i" und Erweiterung nicht verwendet werden kann, da die Erweiterung fakultativ ist.

Super-sed ist eine verlängerte Version von sed, der regelmäßige mit Perl vereinbare Ausdrücke einschließt.

Eine andere Variante von sed ist minised, der ursprünglich von 4.1BSD sed durch Eric S. Raymond rückkonstruiert ist und zurzeit von René aufrechterhalten ist, Rebe. minised wurde durch das GNU-Projekt verwendet, bis das GNU-Projekt eine neue Version von sed geschrieben hat, der auf dem neuen GNU regelmäßige Ausdruck-Bibliothek gestützt ist. Der Strom minised enthält einige Erweiterungen auf BSD sed, aber ist nicht so an der Eigenschaft reich wie GNU sed. Sein Vorteil besteht darin, dass es sehr schnell ist und wenig Gedächtnis verwendet. Es wird auf eingebetteten Systemen verwendet und ist die Version von mit Minix versorgtem sed.

Gebrauch

Das folgende Beispiel zeigt einen typischen, und das allgemeinste, der Gebrauch von sed, wo die-e Auswahl anzeigt, dass der sed Ausdruck folgt:

sed-e 's/oldstuff/newstuff/g' inputFileName> outputFileName

In vielen Versionen ist der-e nicht erforderlich, dem Ausdruck voranzugehen. Der s tritt für Ersatz ein. Der g tritt global ein, was bedeutet, dass alle zusammenpassenden Ereignisse in der Linie ersetzt würden. Der regelmäßige Ausdruck (d. h. Muster), um gesucht zu werden, wird gelegt nach dem ersten Abgrenzen-Symbol (Hieb hier) und der Ersatz folgt dem zweiten Symbol. Hieb ist das herkömmliche Symbol. Irgendwelcher anderer konnte verwendet werden, um Syntax lesbarer zu machen, wenn sie im Muster oder Ersatz (sieh unten) nicht vorkommt, der nützlich ist zu vermeiden, sich Zahnstocher-Syndrom zu neigen.

Unter Unix wird sed häufig als ein Filter in einer Rohrleitung verwendet:

generate_data | sed-e 's/x/y/g'

D. h. erzeugen Sie die Daten, und dann machen Sie das Kleingeld, x durch y zu ersetzen.

Mehrere Ersetzungen oder andere Befehle können in einer Datei genannt, zum Beispiel, subst.sed zusammengestellt werden und dann das Verwenden der-f Auswahl angewandt werden, die Befehle (wie s/x/y/g) von der Datei zu lesen:

sed-f subst.sed inputFileName> outputFileName

Außer dem Ersatz sind andere Formen der einfachen Verarbeitung möglich. Zum Beispiel, der folgende Gebrauch, dem die d befehlen, um Linien zu löschen, die entweder Formblatt sind oder nur Räume enthalten:

sed-e '/^ * $/d' inputFileName

Dieses Beispiel hat etwas vom folgenden regelmäßigen Ausdruck metacharacters verwendet:

  • Das Auslassungszeichen vergleicht den Anfang der Linie.
  • Das Dollarzeichen vergleicht das Ende der Linie.
  • Das Sternchen vergleicht Null oder mehr Ereignisse des vorherigen Charakters.

Komplex sed Konstruktionen ist möglich, ihm erlaubend, als ein einfacher, aber hoch spezialisiert, Programmiersprache zu dienen. Der Fluss der Kontrolle kann zum Beispiel durch den Gebrauch eines Etiketts (ein Doppelpunkt geführt werden, der von einer Schnur gefolgt ist) und die Zweiginstruktion b. Eine Instruktion b gefolgt von einem gültigen Etikett-Namen wird Verarbeitung zum Block im Anschluss an dieses Etikett bewegen. Wenn das Etikett dann nicht besteht, wird der Zweig die Schrift beenden.

Proben

Die erste Linie zu löschen, die das Wort "yourword" von der Datei "yourfile" enthält:

sed '/yourword/d' yourfile

Alle Beispiele des Wortes "yourword" zu löschen:

Zwei Wörter von einer Datei gleichzeitig zu löschen:

oder

Im folgenden Beispiel, sed, der gewöhnlich nur an einer Linie arbeitet, entfernt newlines von Sätzen, wo der zweite Satz mit einem Raum anfängt.

Denken Sie den folgenden Text:

Das ist meine Katze

der Name meiner Katze ist betty

Das ist mein Hund

der Name meines Hunds ist offenherziger

Das ist mein Fisch

der Name meines Fisches ist george

Das ist meine Ziege

der Name meiner Ziege ist adam

Die sed Schrift wird sich unten drehen sie in (Bemerken Sie die Produktion sie betrifft nur die Linien, die mit einem Raum anfangen):

Das ist meine Katze der Name meiner Katze ist betty

Das ist mein Hund der Name meines Hunds ist offenherziger

Das ist mein Fisch der Name meines Fisches ist george

Das ist meine Ziege der Name meiner Ziege ist adam

Hier ist die Schrift:

sed 'N; s/\n//; P; D;'

  • (N) fügen Sie die folgende Linie zum Arbeitspuffer hinzu
  • (s) Ersatz
  • (/\n/) vergleichen ein Zeilenvorschubzeichen und "": Finden Sie eine neue Linie gefolgt von einem Raum
  • (//) ersetzen durch: ein Raum
  • (P) drucken Sie die Spitzenlinie des Arbeitspuffers
  • (D) löschen Sie die Spitzenlinie vom Arbeitspuffer und führen Sie die Schrift wieder

Weniger tragbarer, aber komplizierterer sed Gebrauch stellt einen XML Tisch in einen CSV um:

sed-rn '{s/*//g;//{s/.*//g; H\; /

//{s/.*//g; H }\

Wenn es einen Ist-Wert im Feld gibt, ziehen Sie den xml ab und fügen Sie den Wert zum halten Raum hinzu:

/

Wenn es das Ende einer Reihe ist (</Reihe>), dann bekommen Sie den halten Raum, ersetzen Sie den newlines durch'","' fügen Notierungen zum Anfang und Ende hinzu und drucken dann die Linie:

Wenn es der Anfang einer Reihe ist, klären Sie den halten Raum, indem Sie eine leere Linie hinzufügen:

/

</bezüglich> und eine Durchführung von tetris.

Siehe auch

  • Liste von Programmen von Unix
  • Tr (Unix)

Weiterführende Literatur

Links


Folgender Zugang / Südliches Armut-Gesetzzentrum
Impressum & Datenschutz