So verwenden Sie Sed unter Linux
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 sed
und 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 n
Unterbefehl. 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:
Eine weitere der grundlegenden Funktionen von sed ist der p
Unterbefehl. Ähnlich wie n
liest 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 p
Unterbefehls 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 p
dieser vorhanden ist oder nicht:
Um dieses eigenartige Verhalten zu deaktivieren, fügen Sie das -n
Flag hinzu, bevor Sie Ihre sed-Unterbefehle ausführen:
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 p
Unterbefehl 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:
Sie können den p
Unterbefehl 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“:
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 d
Unterbefehl zusammen mit der spezifischen Zeile oder dem Bereich, den Sie löschen möchten:
Ähnlich wie beim Drucken von Textzeilen d
arbeitet der Unterbefehl mit mehrzeiligen Bereichen. Beispielsweise löscht der folgende Befehl die ersten vier Zeilen aus der Datei „hello.txt“:
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:
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 a
Befehl gefolgt vom Text aus, den Sie hinzufügen möchten:
Es ist auch möglich, ganze Dateien in einen Sed-Textstream einzubinden. Verwenden Sie dazu den r
Befehl gefolgt vom Namen der Datei, die Sie hinzufügen möchten:
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:
Ersetzen Sie den p
Unterbefehl durch s
und 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 g
Option nach dem dritten Backslash Ihres Ausdrucks hinzu:
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 p
Unterbefehl durch h
und 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 H
Unterbefehl 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:
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:
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:
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“:
Neben der Ausgabeumleitung können Sie auch das integrierte -i
Flag 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:
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