So verwenden Sie Sed unter Linux

So verwenden Sie Sed unter Linux
Ein Foto von zwei Computermonitoren, auf denen große Mengen Code angezeigt werden.

Sed ist ein einfaches UNIX-Programm, das weder Dateien erstellt noch bearbeitet. Es ändert lediglich die Daten, die durch seine Eingabe gehen, und stellt die geänderten Daten in seiner Ausgabe dar. Hier sehen wir uns einen kurzen Überblick über die UNIX-Philosophie an, gehen auf die Grundlagen der Verwendung ein sedund zeigen Ihnen Beispiele für die Verwendung des Programms für alltägliche Aufgaben.

Die Grundlagen der Verwendung von Sed

Sed ist ein Programm, das Textdatenströme lesen und ändern kann. Das bedeutet, dass sed im Gegensatz zu einem normalen Texteditor die Dateien auf Ihrem Computer nicht direkt ändert. Stattdessen fungiert es eher als „Filter“ für eingehende Daten und ermöglicht es Ihnen, diese nach Wunsch zu transformieren.

Um mit sed zu beginnen, erstellen Sie zunächst eine Datei mit mindestens fünf Textzeilen. Stellen Sie sicher, dass zwischen Ihren Zeilen ein „Neue Zeile“-Zeichen steht:

Der allgemeine Befehl für sed lautet etwa:

Eine der grundlegendsten Funktionen in sed ist der nUnterbefehl. Er funktioniert, indem er Daten aus der Eingabe von sed liest und sie im „Musterbereich“ Ihres Programms platziert. Dies ist ein spezieller Puffer, der eingehenden Text enthält, bevor sed ihn bearbeitet:

Ein Terminal zeigt den Inhalt der

Eine weitere der grundlegenden Funktionen von sed ist der pUnterbefehl. Ähnlich wie nliest er die Daten, die von seds Eingabe kommen, und platziert sie im Musterbereich des Programms. Er gibt sie jedoch auch explizit in der Ausgabe Ihres Terminals aus.

Die Verwendung des pUnterbefehls kann für Anfänger verwirrend sein, da die Ausführung mit einer beliebigen Texteingabe dazu führt, dass sed seine Ausgabe zweimal druckt. Dies liegt daran, dass sed standardmäßig automatisch seinen Musterbereich druckt, unabhängig davon, ob pdieser vorhanden ist oder nicht:

Ein Terminal, das die Ausgabe des Unterbefehls p ohne das Flag -n anzeigt.

Um dieses eigenartige Verhalten zu deaktivieren, fügen Sie das -nFlag hinzu, bevor Sie Ihre sed-Unterbefehle ausführen:

Ein Terminal, das die Ausgabe des Unterbefehls p mit aktiviertem Flag -n anzeigt.

Nachdem wir die Grundlagen geklärt haben, werden in den folgenden Abschnitten die verschiedenen Möglichkeiten erläutert, mit denen Sie sed zum Bearbeiten von Textdaten verwenden können.

1. Textströme auswählen und zuschneiden

Außer zum Drucken können Sie mit sed auch Text aus Datenströmen und Dateien auswählen und kürzen. Am einfachsten geht das, indem Sie dem pUnterbefehl einen Bereichswert hinzufügen.

Der folgende Befehl verwendet die Bereichssyntax von sed, um die dritte bis fünfte Zeile in Ihrer Datei „hello.txt“ auszudrucken:

Ein Terminal, das die Fähigkeit von sed zeigt, bestimmte Zeilenbereiche zu drucken.

Sie können den pUnterbefehl auch verwenden, um nicht zusammenhängende Zeilen in Ihrem Text zu drucken. Der folgende Befehl druckt beispielsweise die erste und vierte Zeile der Datei „hello.txt“:

Ein Terminal, das zeigt, wie sed nicht benachbarte Zeilen aus einer Textdatei druckt.

2. Entfernen von Text aus einem Sed-Stream

Sed kann auch Daten aus jedem eingehenden Textstrom löschen. Dies ist hilfreich, wenn Sie entweder ein paar Textzeilen aus einer großen Datei entfernen oder die Ausgabe eines Programms bereinigen möchten, um nur die Informationen anzuzeigen, die Sie benötigen.

Verwenden Sie dazu den dUnterbefehl zusammen mit der spezifischen Zeile oder dem Bereich, den Sie löschen möchten:

Ein Terminal, das den Vorgang des Löschens nicht benachbarter Zeilen mit sed zeigt.

Ähnlich wie beim Drucken von Textzeilen darbeitet der Unterbefehl mit mehrzeiligen Bereichen. Beispielsweise löscht der folgende Befehl die ersten vier Zeilen aus der Datei „hello.txt“:

Ein Terminal, das den Vorgang des Löschens eines Zeilenbereichs mit sed zeigt.

Zusätzlich zum Abgleichen bestimmter Zeilenbereiche können Sie reguläre Ausdrücke verwenden, um den Text zu finden, den Sie löschen möchten. Dadurch wird sed angewiesen, nach allen Zeilen zu suchen, die das Wort „world“ enthalten, und es zu löschen:

Sie können reguläre Ausdrücke auch als Bereich für Ihre Eingabedatei verwenden. Dies gibt Ihnen mehr Flexibilität bei der Definition Ihrer Auswahl im Programm:

Ein Terminal, das die Fähigkeit von sed zeigt, Textzeilen basierend auf einem Regex-Muster zu löschen.

3. Hinzufügen von neuem Text zu einem Sed-Stream

Neben dem Löschen von Text kann sed auch neuen Text zu bestehenden Datenströmen hinzufügen. Obwohl es nicht auf dem Niveau eines vollwertigen Texteditors ist, kann diese Funktion für einmalige Änderungen und einfache Textergänzungen dennoch praktisch sein.

Um eine neue Textzeile hinzuzufügen, führen Sie sed mit dem aBefehl gefolgt vom Text aus, den Sie hinzufügen möchten:

Ein Terminal, das den Vorgang des Hinzufügens einer einzelnen Textzeile am Ende eines Sed-Streams zeigt.

Es ist auch möglich, ganze Dateien in einen Sed-Textstream einzubinden. Verwenden Sie dazu den rBefehl gefolgt vom Namen der Datei, die Sie hinzufügen möchten:

Ein Terminal, das den Vorgang des Anhängens einer gesamten Datei an das Ende eines Sed-Streams zeigt.

4. Suchen und Ersetzen von Text in Sed

Eine der leistungsstärksten Funktionen von sed ist die Fähigkeit, Text in einem Textstrom zu suchen und zu ersetzen. Im Gegensatz zum Hinzufügen und Löschen von Text können Sie damit Daten dynamisch bearbeiten, während sie durch UNIX-Pipes laufen, was es im Vergleich zu einem normalen Texteditor viel flexibler macht.

Beginnen Sie mit dem testweisen Ausdrucken Ihres Texts ohne Änderungen durch sed:

Ein Terminal, das den Inhalt der

Ersetzen Sie den pUnterbefehl durch sund fügen Sie anschließend drei Backslashes (/) hinzu:

Fügen Sie zwischen dem ersten und zweiten Backslash einen strukturellen regulären Ausdruck der Zeichenfolge ein, die Sie abgleichen möchten. Ich kann beispielsweise den folgenden Wert eingeben, um in meiner Eingabezeichenfolge nach Wörtern zu suchen, die mit „wo“ beginnen:

Platzieren Sie Ihren Textcursor zwischen dem zweiten und dritten Backslash und geben Sie dann den Text ein, durch den Sie Ihre Übereinstimmungen ersetzen möchten. Im Gegensatz zur vorherigen Spalte verwendet dieser Abschnitt keine strukturellen regulären Ausdrücke:

Standardmäßig ersetzt sed nur die erste Zeichenfolge, die in einer bestimmten Zeile gefunden wird. Dies kann problematisch sein, wenn Sie jedes Vorkommen eines Wortes in Ihrem Textstream ersetzen möchten. Um dies zu beheben, fügen Sie die gOption nach dem dritten Backslash Ihres Ausdrucks hinzu:

Ein Terminal, das den Substitutionsunterbefehl in sed anzeigt.

5. Textdaten in den Hold Space kopieren

Sed verwendet zwei Puffer zum Speichern von Textdaten: den Musterspeicher und den Haltespeicher. Ersterer dient als temporärer Ort für Ihren Text, während er durch die Sed-Ausdrücke geht. Letzterer fungiert als Zwischenablage, in der Sie beliebige Textdaten speichern können.

Ein Vorteil dieses Ansatzes besteht darin, dass Sie bestimmte Ausgaben „aufbewahren“ können, ohne auf externe Programme angewiesen zu sein. Dies kann nützlich sein, wenn Sie sed zur Verarbeitung mehrstufiger Textmanipulationen verwenden möchten.

Um mit der Verwendung von Haltebereichen zu beginnen, stellen Sie zunächst sicher, dass Sie eine Datei mit mindestens einigen Textzeilen haben:

Ersetzen Sie den pUnterbefehl durch hund geben Sie dann entweder eine Zeilennummer oder einen Regex-Wert an, den sed in Ihrer Datei abgleicht. Dadurch wird sed angewiesen, diese bestimmte Textzeile zu nehmen und in seinen Haltebereich zu kopieren:

Sie können den HUnterbefehl auch verwenden, um mehrere Textzeilen in Ihrem Hold Space zu speichern. Beispielsweise speichert der folgende Befehl die dritte und vierte Zeile meiner Textdatei und druckt sie auf dem Terminal aus:

Ein Terminal, das den Vorgang des Haltens mehrerer Textzeilen in seds zeigt

6. Verwenden von Labels zum Erstellen von Schleifen in Sed

Obwohl sed keine umfassende Programmiersprache ist, ist es dennoch möglich, Schleifen innerhalb des Programms zu erstellen. Dies ist nützlich, wenn Sie einen sed-Ausdruck benötigen, der einen bestimmten Texteingabeabschnitt kontinuierlich durchlaufen muss.

Um eine Schleife in sed zu erstellen, müssen Sie zuerst ein Label für Ihren sed-Ausdruck erstellen. Dazu müssen Sie den :Unterbefehl gefolgt vom Label verwenden, das Sie für Ihren Ausdruck verwenden möchten.

Geben Sie die Übereinstimmungskriterien für Ihren sed-Ausdruck an. In meinem Fall möchte ich, dass der Ausdruck an das Ende jeder Zeile in meinem Eingabetext geht:

Geben Sie die sed-Unterbefehle ein, die Sie ausführen möchten, wenn sed eine Übereinstimmung findet, und schließen Sie sie dann in geschweifte Klammern ein. Folgendes verbindet zwei benachbarte Zeilen, ersetzt das Zeilenumbruchzeichen durch ein Leerzeichen und geht dann zurück zum Anfang des Ausdrucks:

Ein Terminal, das den Vorgang des Entfernens von Zeilenumbruchzeichen mithilfe von Sed-Labels in Schleifen zeigt.

Sie können dies sogar erweitern, um fast jede Art von Eingabetext abzugleichen. Beispielsweise verwendet der folgende Befehl die erweiterte Regex-Funktion von sed, um HTML-Tags aus Ihrem Eingabetext zu entfernen:

Ein Terminal, das zeigt, wie sed die HTML-Tags in einer Datei mithilfe von Schleifen entfernt.

7. Dauerhafte Änderungen in Sed vornehmen

Wie jedes andere UNIX-Tool kann sed die Ausgabeumleitung und Pipes nutzen. Dadurch können Sie sed nicht nur mit anderen Programmen verbinden, sondern Ihre Änderungen auch dauerhaft machen.

Die folgende Codezeile erstellt aus der Ausgabe meines sed-Befehls eine neue Datei „welcome.txt“:

Ein Terminal, das die Fähigkeit von sed zeigt, die Ausgabeumleitung zu verwenden, um seine Ausgabe in Dateien zu speichern.

Neben der Ausgabeumleitung können Sie auch das integrierte -iFlag verwenden, um Ihre aktuelle Datei zu bearbeiten, anstatt Ihre Änderungen in Ihrer Terminalkonsole auszugeben. Beispielsweise entfernt der folgende Befehl alle Zeilenumbruchzeichen aus meiner Textdatei und speichert sie:

Ein Terminal mit dem Flag -i in sed, das dem Programm erlaubt,

Wenn all dieses Gerede Ihre Neugier auf die Linux-Befehlszeile geweckt hat, können Sie unseren früheren Artikel lesen, in dem wir über einige der interessantesten Bash-Eingabeaufforderungen sprechen, die Sie heute verwenden können.

Bildnachweis: Morgan Richardson via Unsplash . Alle Änderungen und Screenshots von Ramces Red.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert