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

Die 50 praktischen Beispiele des SED-Befehls in Linux

Egal, ob Sie ein Systemadministrator oder ein einfacher Enthusiast sind, Sie müssen wahrscheinlich oft mit Textdokumenten arbeiten. Linux bietet, wie andere Unices, einige der besten Dienstprogramme zur Textbearbeitung für Endbenutzer. Das Befehlszeilendienstprogramm sed ist ein solches Tool, das die Textverarbeitung wesentlich bequemer und produktiver macht. Wenn Sie ein erfahrener Benutzer sind, sollten Sie bereits über sed Bescheid wissen. Anfänger haben jedoch oft das Gefühl, dass das Erlernen von sed zusätzliche harte Arbeit erfordert, und verzichten daher auf die Verwendung dieses faszinierenden Tools. Aus diesem Grund haben wir uns die Freiheit genommen, diesen Leitfaden zu erstellen und ihnen dabei zu helfen, die Grundlagen von sed so einfach wie möglich zu erlernen.

Nützliche SED-Befehle für Anfänger

Sed ist neben „grep“ und „awk“ eines der drei weit verbreiteten Filterprogramme, die in Unix verfügbar sind. Wir haben bereits die Linux-Befehle grep und awk für Anfänger behandelt. Dieses Handbuch soll das Dienstprogramm sed für unerfahrene Benutzer zusammenfassen und sie in der Textverarbeitung unter Linux und anderen Unices versiert machen.

Wie SED funktioniert:Ein grundlegendes Verständnis

Bevor Sie sich direkt mit den Beispielen befassen, sollten Sie ein kurzes Verständnis davon haben, wie sed im Allgemeinen funktioniert. Sed ist ein Stream-Editor, der auf dem Dienstprogramm ed aufbaut. Es ermöglicht uns, Änderungen an einem Strom von Textdaten vorzunehmen. Obwohl wir eine Reihe von Linux-Texteditoren zum Bearbeiten verwenden können, ermöglicht sed etwas Bequemeres.

Sie können sed verwenden, um Text umzuwandeln oder wichtige Daten im Handumdrehen herauszufiltern. Es hält sich an die zentrale Unix-Philosophie, indem es diese spezielle Aufgabe sehr gut erfüllt. Darüber hinaus spielt sed sehr gut mit Standard-Linux-Terminal-Tools und -Befehlen. Daher ist es für viele Aufgaben besser geeignet als herkömmliche Texteditoren.

Im Kern nimmt sed einige Eingaben entgegen, führt einige Manipulationen durch und spuckt die Ausgabe aus. Es verändert die Eingabe nicht, sondern zeigt einfach das Ergebnis in der Standardausgabe. Wir können diese Änderungen leicht dauerhaft machen, indem wir entweder eine E/A-Umleitung vornehmen oder die Originaldatei ändern. Die grundlegende Syntax eines sed-Befehls ist unten dargestellt.

sed [OPTIONS] INPUT
sed 'list of ed commands' filename

Die erste Zeile ist die im sed-Handbuch gezeigte Syntax. Das zweite ist einfacher zu verstehen. Machen Sie sich keine Sorgen, wenn Sie im Moment nicht mit ed-Befehlen vertraut sind. Sie lernen sie in diesem Leitfaden kennen.

1. Texteingabe ersetzen

- -

Der Substitutionsbefehl ist für viele Benutzer das am häufigsten verwendete Feature von sed. Es ermöglicht uns, einen Teil des Textes durch andere Daten zu ersetzen. Sie werden diesen Befehl sehr oft für die Verarbeitung von Textdaten verwenden. Es funktioniert wie folgt.

$ echo 'Hello world!' | sed 's/world/universe/'

Dieser Befehl gibt die Zeichenfolge „Hello universe!“ aus. Es hat vier grundlegende Teile. Die ‘s‘ command bezeichnet die Substitutionsoperation, /../../ sind Trennzeichen, der erste Teil innerhalb der Trennzeichen ist das Muster, das geändert werden muss, und der letzte Teil ist die Ersetzungszeichenfolge.

2. Texteingabe aus Dateien ersetzen

Lassen Sie uns zunächst eine Datei erstellen, indem Sie Folgendes verwenden.

$ echo 'strawberry fields forever...' >> input-file
$ cat input-file

Angenommen, wir möchten Erdbeere durch Heidelbeere ersetzen. Wir können dies mit dem folgenden einfachen Befehl tun. Beachten Sie die Ähnlichkeiten zwischen dem sed-Teil dieses Befehls und dem obigen.

$ sed 's/strawberry/blueberry/' input-file

Wir haben einfach den Dateinamen nach dem sed-Teil hinzugefügt. Sie können auch zuerst den Inhalt der Datei ausgeben und dann sed verwenden, um den Ausgabestrom zu bearbeiten, wie unten gezeigt.

$ cat input-file | sed 's/strawberry/blueberry/'

3. Änderungen an Dateien speichern

Wie wir bereits erwähnt haben, ändert sed die Eingabedaten überhaupt nicht. Es zeigt einfach die transformierten Daten auf der Standardausgabe an, die standardmäßig das Linux-Terminal ist. Sie können dies überprüfen, indem Sie den folgenden Befehl ausführen.

$ cat input-file

Dadurch wird der ursprüngliche Inhalt der Datei angezeigt. Angenommen, Sie möchten Ihre Änderungen dauerhaft machen. Sie können dies auf mehrere Arten tun. Die Standardmethode besteht darin, Ihre sed-Ausgabe in eine andere Datei umzuleiten. Der nächste Befehl speichert die Ausgabe des vorherigen sed-Befehls in einer Datei namens output-file.

$ sed 's/strawberry/blueberry/' input-file >> output-file

Sie können dies mit dem folgenden Befehl überprüfen.

$ cat output-file

4. Änderungen in Originaldatei speichern

Was wäre, wenn Sie die Ausgabe von sed wieder in der Originaldatei speichern möchten? Dies ist mit dem -i möglich oder –an Ort und Stelle Option dieses Tools. Die folgenden Befehle demonstrieren dies anhand geeigneter Beispiele.

$ sed -i 's/strawberry/blueberry' input-file
$ sed --in-place 's/strawberry/blueberry/' input-file

Diese beiden obigen Befehle sind gleichwertig und schreiben die von sed vorgenommenen Änderungen in die Originaldatei zurück. Wenn Sie jedoch daran denken, die Ausgabe zurück in die Originaldatei umzuleiten, wird dies nicht wie erwartet funktionieren.

$ sed 's/strawberry/blueberry/' input-file > input-file

Dieser Befehl wird nicht funktionieren und führen zu einer leeren Eingabedatei. Dies liegt daran, dass die Shell die Umleitung durchführt, bevor sie den Befehl selbst ausführt.

5. Escaping-Trennzeichen

Viele herkömmliche sed-Beispiele verwenden das Zeichen „/“ als Trennzeichen. Was aber, wenn Sie eine Zeichenfolge ersetzen möchten, die dieses Zeichen enthält? Das folgende Beispiel veranschaulicht, wie ein Dateinamenpfad mit sed ersetzt wird. Wir müssen die Trennzeichen „/“ mit dem Backslash-Zeichen maskieren.

$ echo '/usr/local/bin/dummy' >> input-file
$ sed 's/\/usr\/local\/bin\/dummy/\/usr\/bin\/dummy/' input-file > output-file

Ein weiterer einfacher Weg, Trennzeichen zu umgehen, ist die Verwendung eines anderen Metazeichens. Beispielsweise könnten wir „_“ anstelle von „/“ als Trennzeichen für den Substitutionsbefehl verwenden. Es ist vollkommen gültig, da sed keine bestimmten Trennzeichen vorschreibt. Das „/“ wird nach Konvention verwendet, nicht als Anforderung.

$ sed 's_/usr/local/bin/dummy_/usr/bin/dummy/_' input-file

6. Jede Instanz eines Strings ersetzen

Eine interessante Eigenschaft des Ersetzungsbefehls ist, dass er standardmäßig nur eine einzelne Instanz einer Zeichenkette in jeder Zeile ersetzt.

$ cat << EOF >> input-file 
one two one three
two four two
three one four
EOF

Dieser Befehl ersetzt den Inhalt der Eingabedatei durch einige Zufallszahlen in einem Zeichenfolgenformat. Sehen Sie sich nun den folgenden Befehl an.

$ sed 's/one/ONE/' input-file

Wie Sie sehen sollten, ersetzt dieser Befehl nur das erste Vorkommen von „Eins“ in der ersten Zeile. Sie müssen die globale Ersetzung verwenden, um alle Vorkommen eines Wortes mit sed zu ersetzen. Fügen Sie einfach ein „g“ hinzu nach dem letzten Trennzeichen von s ‘.

$ sed 's/one/ONE/g' input-file

Dadurch werden alle Vorkommen des Wortes „eins“ im gesamten Eingabestrom ersetzt.

7. Übereinstimmende Zeichenfolge verwenden

Manchmal möchten Benutzer bestimmte Dinge wie Klammern oder Anführungszeichen um eine bestimmte Zeichenfolge hinzufügen. Dies ist einfach, wenn Sie genau wissen, wonach Sie suchen. Was aber, wenn wir nicht genau wissen, was wir finden werden? Das Dienstprogramm sed bietet eine nette kleine Funktion zum Abgleichen solcher Zeichenfolgen.

$ echo 'one two three 123' | sed 's/123/(123)/'

Hier fügen wir mit dem Substitutionsbefehl sed Klammern um die 123 ein. Wir können dies jedoch für jeden String in unserem Eingabestrom tun, indem wir das spezielle Metazeichen & verwenden , wie im folgenden Beispiel veranschaulicht.

$ echo 'one two three 123' | sed 's/[a-z][a-z]*/(&)/g'

Dieser Befehl fügt Klammern um alle Kleinbuchstaben in unserer Eingabe ein. Wenn Sie das „g“ weglassen Option, sed wird dies nur für das erste Wort tun, nicht für alle.

8. Erweiterte reguläre Ausdrücke verwenden

Im obigen Befehl haben wir alle Kleinbuchstaben mit dem regulären Ausdruck [a-z][a-z]* abgeglichen. Es stimmt mit einem oder mehreren Kleinbuchstaben überein. Eine andere Möglichkeit, sie abzugleichen, wäre die Verwendung des Metazeichens ‘+‘ . Dies ist ein Beispiel für erweiterte reguläre Ausdrücke. Daher wird sed sie standardmäßig nicht unterstützen.

$ echo 'one two three 123' | sed 's/[a-z]+/(&)/g'

Dieser Befehl funktioniert nicht wie beabsichtigt, da sed das ‘+‘ nicht unterstützt Metazeichen aus der Box. Sie müssen die Optionen -E verwenden oder -r um erweiterte reguläre Ausdrücke in sed zu aktivieren.

$ echo 'one two three 123' | sed -E 's/[a-z]+/(&)/g'
$ echo 'one two three 123' | sed -r 's/[a-z]+/(&)/g'

9. Durchführen mehrerer Ersetzungen

Wir können mehr als einen sed-Befehl auf einmal verwenden, indem wir sie durch ‘;’ trennen (Semikolon). Dies ist sehr nützlich, da es dem Benutzer ermöglicht, robustere Befehlskombinationen zu erstellen und zusätzlichen Aufwand im laufenden Betrieb zu reduzieren. Der folgende Befehl zeigt uns, wie man mit dieser Methode drei Strings auf einmal ersetzt.

$ echo 'one two three' | sed 's/one/1/; s/two/2/; s/three/3/'

Wir haben dieses einfache Beispiel verwendet, um zu veranschaulichen, wie mehrere Ersetzungen oder andere sed-Operationen für diese Angelegenheit durchgeführt werden.

10. Groß-/Kleinschreibung unempfindlich ersetzen

Das Dienstprogramm sed ermöglicht es uns, Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung zu ersetzen. Lassen Sie uns zunächst sehen, wie sed die folgende einfache Ersetzungsoperation ausführt.

$ echo 'one ONE OnE' | sed 's/one/1/g' # replaces single one

Der Substitutionsbefehl kann nur mit einer Instanz von „one“ übereinstimmen und diese somit ersetzen. Angenommen, wir möchten, dass alle Vorkommen von „Eins“ übereinstimmen, unabhängig von ihrem Fall. Wir können dies angehen, indem wir das 'i'-Flag der sed-Substitutionsoperation verwenden.

$ echo 'one ONE OnE' | sed 's/one/1/gi' # replaces all ones

11. Bestimmte Zeilen drucken

Wir können eine bestimmte Zeile aus der Eingabe anzeigen, indem wir das ‘p‘ verwenden Befehl. Lassen Sie uns etwas mehr Text zu unserer Eingabedatei hinzufügen und dieses Beispiel demonstrieren.

$ echo 'Adding some more
text to input file
for better demonstration' >> input-file

Führen Sie nun den folgenden Befehl aus, um zu sehen, wie Sie eine bestimmte Zeile mit „p“ drucken.

$ sed '3p; 6p' input-file

Die Ausgabe sollte die Zeilennummer drei und sechs zweimal enthalten. Das haben wir nicht erwartet, oder? Dies geschieht, weil sed standardmäßig alle Zeilen des Eingabestroms ausgibt, sowie die speziell gefragten Zeilen. Um nur bestimmte Zeilen zu drucken, müssen wir alle anderen Ausgaben unterdrücken.

$ sed -n '3p; 6p' input-file
$ sed --quiet '3p; 6p' input-file
$ sed --silent '3p; 6p' input-file

Alle diese sed-Befehle sind gleichwertig und drucken nur die dritte und sechste Zeile aus unserer Eingabedatei. Sie können also unerwünschte Ausgaben unterdrücken, indem Sie eines von -n verwenden , –leise , oder –leise Optionen.

12. Druckbereich der Linien

Der folgende Befehl druckt eine Reihe von Zeilen aus unserer Eingabedatei. Das Symbol ‘,’ kann verwendet werden, um einen Eingabebereich für sed festzulegen.

$ sed -n '2,4p' input-file
$ sed --quiet '2,4p' input-file
$ sed --silent '2,4p' input-file

Alle diese drei Befehle sind ebenfalls gleichwertig. Sie drucken die Zeilen zwei bis vier unserer Eingabedatei.

13. Nicht aufeinanderfolgende Zeilen drucken

Angenommen, Sie möchten bestimmte Zeilen aus Ihrer Texteingabe mit einem einzigen Befehl drucken. Sie können solche Operationen auf zwei Arten handhaben. Die erste besteht darin, mehrere Druckvorgänge mit ‘;’ zu verbinden Trennzeichen.

$ sed -n '1,2p; 5,6p' input-file

Dieser Befehl gibt die ersten beiden Zeilen der Eingabedatei aus, gefolgt von den letzten beiden Zeilen. Sie können dies auch mit dem -e tun Option von sed. Beachten Sie die Unterschiede in der Syntax.

$ sed -n -e '1,2p' -e '5,6p' input-file

14. Jede N-te Zeile drucken

Angenommen, wir wollten jede zweite Zeile aus unserer Eingabedatei anzeigen. Das Dienstprogramm sed macht dies sehr einfach, indem es die Tilde ‘~’ bereitstellt Operator. Werfen Sie einen kurzen Blick auf den folgenden Befehl, um zu sehen, wie das funktioniert.

$ sed -n '1~2p' input-file

Dieser Befehl funktioniert, indem er die erste Zeile ausgibt, gefolgt von jeder zweiten Zeile der Eingabe. Der folgende Befehl gibt die zweite Zeile aus, gefolgt von jeder dritten Zeile aus der Ausgabe eines einfachen ip-Befehls.

$ ip -4 a | sed -n '2~3p'

15. Text innerhalb eines Bereichs ersetzen

Wir können auch Text nur innerhalb eines bestimmten Bereichs auf die gleiche Weise ersetzen, wie wir ihn gedruckt haben. Der folgende Befehl zeigt, wie man die Einsen durch Einsen in den ersten drei Zeilen unserer Eingabedatei mit sed ersetzt.

$ sed '1,3 s/one/1/gi' input-file

Dieser Befehl lässt alle anderen „Einsen“ unberührt. Fügen Sie dieser Datei einige Zeilen hinzu, die eine enthalten, und versuchen Sie es selbst zu überprüfen.

16. Löschen von Zeilen aus der Eingabe

Der ed-Befehl ‘d’ ermöglicht es uns, bestimmte Zeilen oder Zeilenbereiche aus dem Textstrom oder aus Eingabedateien zu löschen. Der folgende Befehl demonstriert, wie man die erste Zeile aus der Ausgabe von sed.

löscht
$ sed '1d' input-file

Da sed nur in die Standardausgabe schreibt, wirkt sich diese Löschung nicht auf die Originaldatei aus. Derselbe Befehl kann verwendet werden, um die erste Zeile eines mehrzeiligen Textstroms zu löschen.

$ ps | sed '1d'

Also, indem Sie einfach das ‚d‘ verwenden Befehl nach der Zeilenadresse können wir die Eingabe für sed.

unterdrücken

17. Zeilenbereich aus Eingabe löschen

Es ist auch sehr einfach, einen Zeilenbereich zu löschen, indem Sie den Operator „,“ neben dem „d“ verwenden Möglichkeit. Der nächste sed-Befehl wird die ersten drei Zeilen unserer Eingabedatei unterdrücken.

$ sed '1,3d' input-file

Wir können auch nicht aufeinanderfolgende Zeilen löschen, indem wir einen der folgenden Befehle verwenden.

$ sed '1d; 3d; 5d' input-file

Dieser Befehl zeigt die zweite, vierte und letzte Zeile unserer Eingabedatei an. Der folgende Befehl lässt einige willkürliche Zeilen aus der Ausgabe eines einfachen Linux-IP-Befehls weg.

$ ip -4 a | sed '1d; 3d; 4d; 6d'

18. Löschen der letzten Zeile

Das Dienstprogramm sed verfügt über einen einfachen Mechanismus, mit dem wir die letzte Zeile aus einem Textstream oder einer Eingabedatei löschen können. Es ist das ‘$’ Symbol und kann neben dem Löschen auch für andere Arten von Operationen verwendet werden. Der folgende Befehl löscht die letzte Zeile aus der Eingabedatei.

$ sed '$d' input-file

Dies ist sehr nützlich, da wir oft die Anzahl der Zeilen im Voraus kennen. Dies funktioniert ähnlich für Pipeline-Eingaben.

$ seq 3 | sed '$d'

19. Alle Zeilen außer bestimmten löschen

Ein weiteres praktisches Beispiel für das Löschen von sed ist das Löschen aller Zeilen außer denen, die im Befehl angegeben sind. Dies ist nützlich, um wichtige Informationen aus Textströmen oder der Ausgabe anderer Linux-Terminalbefehle herauszufiltern.

$ free | sed '2!d'

Dieser Befehl gibt nur die Speichernutzung aus, die zufällig in der zweiten Zeile steht. Sie können dasselbe auch mit Eingabedateien machen, wie unten gezeigt.

$ sed '1,3!d' input-file

Dieser Befehl löscht jede Zeile außer den ersten drei aus der Eingabedatei.

20. Leerzeilen hinzufügen

Manchmal ist der Eingangsstrom möglicherweise zu konzentriert. In solchen Fällen können Sie das Dienstprogramm sed verwenden, um Leerzeilen zwischen den Eingaben einzufügen. Das nächste Beispiel fügt eine Leerzeile zwischen jeder Zeile der Ausgabe des Befehls ps hinzu.

$ ps aux | sed 'G'

Das „G“ Befehl fügt diese Leerzeile hinzu. Sie können mehrere Leerzeilen hinzufügen, indem Sie mehr als ein „G“ verwenden Befehl für sed.

$ sed 'G; G' input-file

Der folgende Befehl zeigt Ihnen, wie Sie nach einer bestimmten Zeilennummer eine Leerzeile hinzufügen. Es fügt eine Leerzeile nach der dritten Zeile unserer Eingabedatei hinzu.

$ sed '3G' input-file

21. Ersetzen von Text in bestimmten Zeilen

Das Dienstprogramm sed ermöglicht es Benutzern, Text in einer bestimmten Zeile zu ersetzen. Dies ist in einer Reihe verschiedener Szenarien nützlich. Angenommen, wir möchten das Wort „eins“ in der dritten Zeile unserer Eingabedatei ersetzen. Dazu können wir den folgenden Befehl verwenden.

$ sed '3 s/one/1/' input-file

Die ‘3’ vor dem Beginn des s’ Befehl gibt an, dass wir nur das Wort ersetzen wollen, das in der dritten Zeile gefunden wird.

22. Ersetzen des N-ten Wortes einer Zeichenkette

Wir können auch den Befehl sed verwenden, um das n-te Vorkommen eines Musters für eine bestimmte Zeichenfolge zu ersetzen. Das folgende Beispiel veranschaulicht dies anhand eines einzelnen einzeiligen Beispiels in bash.

$ echo 'one one one one one one' | sed 's/one/1/3'

Dieser Befehl ersetzt die dritte „Eins“ durch die Zahl 1. Dies funktioniert auf die gleiche Weise für Eingabedateien. Der folgende Befehl ersetzt die letzten „Zwei“ aus der zweiten Zeile der Eingabedatei.

$ cat input-file | sed '2 s/two/2/2'

Wir wählen zuerst die zweite Zeile aus und geben dann an, welches Vorkommen des Musters geändert werden soll.

23. Neue Zeilen hinzufügen

Mit dem Befehl ‘a‘ können Sie ganz einfach neue Zeilen zum Eingabestream hinzufügen . Sehen Sie sich das einfache Beispiel unten an, um zu sehen, wie das funktioniert.

$ sed 'a new line in input' input-file

Der obige Befehl fügt die Zeichenfolge „neue Zeile in der Eingabe“ nach jeder Zeile der ursprünglichen Eingabedatei an. Dies ist jedoch möglicherweise nicht das, was Sie beabsichtigt haben. Sie können neue Zeilen nach einer bestimmten Zeile hinzufügen, indem Sie die folgende Syntax verwenden.

$ sed '3 a new line in input' input-file

24. Neue Zeilen einfügen

Wir können auch Zeilen einfügen, anstatt sie anzuhängen. Der folgende Befehl fügt vor jeder Eingabezeile eine neue Zeile ein.

$ seq 5 | sed 'i 888'

Das „ich“ bewirkt, dass der String 888 vor jeder Zeile der Ausgabe von seq eingefügt wird. Verwenden Sie die folgende Syntax, um eine Zeile vor einer bestimmten Eingabezeile einzufügen.

$ seq 5 | sed '3 i 333'

Dieser Befehl fügt die Zahl 333 vor der Zeile ein, die tatsächlich drei enthält. Dies sind einfache Beispiele für das Einfügen von Zeilen. Sie können ganz einfach Zeichenfolgen hinzufügen, indem Sie Linien mithilfe von Mustern abgleichen.

25. Eingabezeilen ändern

Wir können die Zeilen eines Eingabestreams auch direkt mit dem 'c' ändern Befehl des Dienstprogramms sed. Dies ist nützlich, wenn Sie genau wissen, welche Zeile ersetzt werden soll, und die Zeile nicht mit regulären Ausdrücken abgleichen möchten. Das folgende Beispiel ändert die dritte Zeile der Ausgabe des seq-Befehls.

$ seq 5 | sed '3 c 123'

Es ersetzt den Inhalt der dritten Zeile, die 3 ist, durch die Zahl 123. Das nächste Beispiel zeigt uns, wie wir die letzte Zeile unserer Eingabedatei mit ‚c‘ ändern können .

$ sed '$ c CHANGED STRING' input-file

Wir können auch Regex verwenden, um die zu ändernde Zeilennummer auszuwählen. Das nächste Beispiel veranschaulicht dies.

$ sed '/demo*/ c CHANGED TEXT' input-file

26. Sicherungsdateien für die Eingabe erstellen

Wenn Sie Text transformieren und die Änderungen wieder in der Originaldatei speichern möchten, empfehlen wir Ihnen dringend, Sicherungsdateien zu erstellen, bevor Sie fortfahren. Der folgende Befehl führt einige sed-Operationen an unserer Eingabedatei durch und speichert sie als Original. Außerdem legt es vorsichtshalber ein Backup namens input-file.old an.

$ sed -i.old 's/one/1/g; s/two/2/g; s/three/3/g' input-file

Das -i schreibt die von sed vorgenommenen Änderungen in die Originaldatei. Der .old-Suffixteil ist verantwortlich für die Erstellung des Dokuments input-file.old.

27. Drucken von Linien basierend auf Mustern

Angenommen, wir möchten alle Zeilen einer Eingabe nach einem bestimmten Muster drucken. Das ist ziemlich einfach, wenn wir die sed-Befehle ‚p‘ kombinieren mit dem -n Möglichkeit. Das folgende Beispiel veranschaulicht dies anhand der Eingabedatei.

$ sed -n '/^for/ p' input-file

Dieser Befehl sucht am Anfang jeder Zeile nach dem Muster „for“ und gibt nur Zeilen aus, die damit beginnen. Das ‘^’ Das Zeichen ist ein spezielles Zeichen für reguläre Ausdrücke, das als Anker bezeichnet wird. Es gibt an, dass sich das Muster am Anfang der Zeile befinden soll.

28. Verwendung von SED als Alternative zu GREP

Der grep-Befehl in Linux sucht nach einem bestimmten Muster in einer Datei und zeigt die Zeile an, wenn sie gefunden wird. Wir können dieses Verhalten mit dem Dienstprogramm sed emulieren. Der folgende Befehl veranschaulicht dies anhand eines einfachen Beispiels.

$ sed -n 's/strawberry/&/p' /usr/share/dict/american-english

Dieser Befehl findet das Wort Erdbeere im amerikanischen Englisch Wörterbuchdatei. Es funktioniert, indem es nach dem Muster „Erdbeere“ sucht und dann neben dem „p“ eine übereinstimmende Zeichenfolge verwendet Befehl zum Drucken. Das -n flag unterdrückt alle anderen Zeilen in der Ausgabe. Wir können diesen Befehl vereinfachen, indem wir die folgende Syntax verwenden.

$ sed -n '/strawberry/p' /usr/share/dict/american-english

29. Text aus Dateien hinzufügen

Das ‘r’ Der Befehl des Dienstprogramms sed ermöglicht es uns, aus einer Datei gelesenen Text an den Eingabestrom anzuhängen. Der folgende Befehl erzeugt mit dem Befehl seq einen Eingabestrom für sed und hängt die in der Eingabedatei enthaltenen Texte an diesen Strom an.

$ seq 5 | sed 'r input-file'

Dieser Befehl fügt den Inhalt der Eingabedatei nach jeder aufeinanderfolgenden Eingabesequenz hinzu, die von seq erzeugt wird. Verwenden Sie den nächsten Befehl, um den Inhalt nach den von seq generierten Zahlen hinzuzufügen.

$ seq 5 | sed '$ r input-file'

Sie können den folgenden Befehl verwenden, um den Inhalt nach der n-ten Eingabezeile hinzuzufügen.

$ seq 5 | sed '3 r input-file'

30. Änderungen an Dateien schreiben

Angenommen, wir haben eine Textdatei, die eine Liste mit Webadressen enthält. Angenommen, einige von ihnen beginnen mit www, andere mit https und andere mit http. Wir können alle Adressen, die mit www beginnen, so ändern, dass sie mit https beginnen, und nur die geänderten Adressen in einer ganz neuen Datei speichern.

$ sed 's/www/https/ w modified-websites' websites

Wenn Sie nun den Inhalt der Datei modifyed-websites untersuchen, finden Sie nur die Adressen, die von sed geändert wurden. Der w Dateiname ‘ Option bewirkt, dass sed die Änderungen in den angegebenen Dateinamen schreibt. Dies ist nützlich, wenn Sie es mit großen Dateien zu tun haben und die geänderten Daten separat speichern möchten.

31. Verwenden von SED-Programmdateien

Manchmal müssen Sie möglicherweise eine Reihe von sed-Vorgängen für einen bestimmten Eingabesatz ausführen. In solchen Fällen ist es besser, eine Programmdatei zu schreiben, die alle verschiedenen sed-Skripte enthält. Diese Programmdatei können Sie dann einfach mit dem -f aufrufen Option des Dienstprogramms sed.

$ cat << EOF >> sed-script
s/a/A/g
s/e/E/g
s/i/I/g
s/o/O/g
s/u/U/g
EOF

Dieses sed-Programm wandelt alle Kleinbuchstaben in Großbuchstaben um. Sie können dies ausführen, indem Sie die folgende Syntax verwenden.

$ sed -f sed-script input-file
$ sed --file=sed-script < input-file

32. Mehrzeilige SED-Befehle verwenden

Wenn Sie ein großes sed-Programm schreiben, das sich über mehrere Zeilen erstreckt, müssen Sie diese richtig zitieren. Die Syntax unterscheidet sich geringfügig zwischen verschiedenen Linux-Shells. Glücklicherweise ist es für die Bourne-Shell und ihre Derivate (bash) sehr einfach.

$ sed '
s/a/A/g 
s/e/E/g 
s/i/I/g 
s/o/O/g 
s/u/U/g' < input-file

In einigen Shells, wie der C-Shell (csh), müssen Sie die Anführungszeichen mit dem umgekehrten Schrägstrich (\) schützen.

$ sed 's/a/A/g \
s/e/E/g \
s/i/I/g \
s/o/O/g \
s/u/U/g' < input-file

33. Zeilennummern drucken

Wenn Sie die Zeilennummer drucken möchten, die eine bestimmte Zeichenfolge enthält, können Sie sie anhand eines Musters suchen und ganz einfach drucken. Dazu müssen Sie das ‘=’ verwenden Befehl des Dienstprogramms sed.

$ sed -n '/ion*/ =' < input-file

Dieser Befehl sucht nach dem angegebenen Muster in der Eingabedatei und gibt seine Zeilennummer in der Standardausgabe aus. Sie können auch eine Kombination aus grep und awk verwenden, um dies anzugehen.

$ cat -n input-file | grep 'ion*' | awk '{print $1}'

Sie können den folgenden Befehl verwenden, um die Gesamtzahl der Zeilen in Ihrer Eingabe auszugeben.

$ sed -n '$=' input-file

34. Überschreiben von Symlinks verhindern

Das sed 'i' oder ‘–an Ort und Stelle Der Befehl überschreibt häufig alle Systemverknüpfungen mit regulären Dateien. Dies ist in vielen Fällen eine unerwünschte Situation, und Benutzer möchten dies möglicherweise verhindern. Glücklicherweise bietet sed eine einfache Befehlszeilenoption, um das Überschreiben symbolischer Links zu deaktivieren.

$ echo 'apple' > fruit
$ ln --symbolic fruit fruit-link
$ sed --in-place --follow-symlinks 's/apple/banana/' fruit-link
$ cat fruit

Sie können also verhindern, dass symbolische Links überschrieben werden, indem Sie die –follow-symlinks verwenden Option des Dienstprogramms sed. Auf diese Weise können Sie die symbolischen Links bei der Textverarbeitung beibehalten.

35. Drucken aller Benutzernamen aus /etc/passwd

Die /etc/passwd enthält systemweite Informationen für alle Benutzerkonten in Linux. Wir können eine Liste aller in dieser Datei verfügbaren Benutzernamen erhalten, indem wir ein einfaches einzeiliges sed-Programm verwenden. Sehen Sie sich das folgende Beispiel genau an, um zu sehen, wie das funktioniert.

$ sed 's/\([^:]*\).*/\1/' /etc/passwd

Wir haben ein reguläres Ausdrucksmuster verwendet, um das erste Feld aus dieser Datei abzurufen, während alle anderen Informationen verworfen werden. Hier befinden sich die Benutzernamen in /etc/passwd Datei.

36. Kommentierte Zeilen aus der Eingabe löschen

Viele Systemtools sowie Anwendungen von Drittanbietern werden mit Konfigurationsdateien geliefert. Diese Dateien enthalten normalerweise viele Kommentare, die die Parameter im Detail beschreiben. Manchmal möchten Sie jedoch möglicherweise nur die Konfigurationsoptionen anzeigen und die ursprünglichen Kommentare beibehalten.

$ cat ~/.bashrc | sed -e 's/#.*//;/^$/d'

Dieser Befehl löscht die kommentierten Zeilen aus der Bash-Konfigurationsdatei. Die Kommentare sind mit einem vorangestellten „#“-Zeichen gekennzeichnet. Also haben wir alle diese Zeilen mit einem einfachen Regex-Muster entfernt. Wenn die Kommentare mit einem anderen Symbol gekennzeichnet sind, ersetzen Sie das „#“ im obigen Muster durch dieses spezifische Symbol.

$ cat ~/.vimrc | sed -e 's/".*//;/^$/d'

Dadurch werden die Kommentare aus der vim-Konfigurationsdatei entfernt, die mit einem doppelten Anführungszeichen (“) beginnt.

37. Löschen von Leerzeichen aus der Eingabe

Viele Textdokumente sind mit unnötigen Leerzeichen gefüllt. Oft sind sie das Ergebnis einer schlechten Formatierung und können die gesamten Dokumente durcheinander bringen. Glücklicherweise ermöglicht sed den Benutzern, diese unerwünschten Abstände ziemlich einfach zu entfernen. Sie können den nächsten Befehl verwenden, um führende Leerzeichen aus einem Eingabestrom zu entfernen.

$ sed 's/^[ \t]*//' whitespace.txt

Dieser Befehl entfernt alle führenden Leerzeichen aus der Datei whitespace.txt. Wenn Sie abschließende Leerzeichen entfernen möchten, verwenden Sie stattdessen den folgenden Befehl.

$ sed 's/[ \t]*$//' whitespace.txt

Sie können auch den Befehl sed verwenden, um sowohl führende als auch nachgestellte Leerzeichen gleichzeitig zu entfernen. Der folgende Befehl kann verwendet werden, um diese Aufgabe zu erledigen.

$ sed 's/^[ \t]*//;s/[ \t]*$//' whitespace.txt

38. Seitenversätze mit SED erstellen

Wenn Sie eine große Datei mit Nullauffüllungen auf der Vorderseite haben, möchten Sie möglicherweise einige Seitenversätze dafür erstellen. Seitenversätze sind einfach führende Leerzeichen, die uns helfen, die Eingabezeilen mühelos zu lesen. Der folgende Befehl erzeugt einen Offset von 5 Leerzeichen.

$ sed 's/^/ /' input-file

Erhöhen oder verringern Sie einfach den Abstand, um einen anderen Versatz anzugeben. Der nächste Befehl reduziert den Seitenversatz um 3 Leerzeilen.

$ sed 's/^/ /' input-file

39. Eingabezeilen umkehren

Der folgende Befehl zeigt uns, wie Sie sed verwenden, um die Reihenfolge der Zeilen in einer Eingabedatei umzukehren. Es emuliert das Verhalten des tac von Linux Befehl.

$ sed '1!G;h;$!d' input-file

Dieser Befehl kehrt die Zeilen des Eingabezeilendokuments um. Dies kann auch mit einer alternativen Methode erfolgen.

$ sed -n '1!G;h;$p' input-file

40. Eingabezeichen umkehren

Wir können auch das Dienstprogramm sed verwenden, um die Zeichen in den Eingabezeilen umzukehren. Dadurch wird die Reihenfolge jedes aufeinanderfolgenden Zeichens im Eingabestrom umgekehrt.

$ sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' input-file

Dieser Befehl emuliert das Verhalten von Linux rev Befehl. Sie können dies überprüfen, indem Sie den folgenden Befehl nach dem obigen ausführen.

$ rev input-file

41. Verbinden von Paaren von Eingabelinien

Der folgende einfache sed-Befehl verbindet zwei aufeinanderfolgende Zeilen einer Eingabedatei zu einer einzigen Zeile. Dies ist nützlich, wenn Sie einen großen Text mit Trennlinien haben.

$ sed '$!N;s/\n/ /' input-file
$ tail -15 /usr/share/dict/american-english | sed '$!N;s/\n/ /'

Es ist bei einer Reihe von Textbearbeitungsaufgaben nützlich.

42. Hinzufügen von Leerzeilen in jeder N-ten Eingabezeile

Mit sed können Sie ganz einfach in jede n-te Zeile der Eingabedatei eine Leerzeile einfügen. Die nächsten Befehle fügen in jeder dritten Zeile der Eingabedatei eine Leerzeile hinzu.

$ sed 'n;n;G;' input-file

Verwenden Sie Folgendes, um die Leerzeile in jeder zweiten Zeile hinzuzufügen.

$ sed 'n;G;' input-file

43. Drucken der letzten N-ten Zeilen

Früher haben wir sed-Befehle verwendet, um Eingabezeilen basierend auf Zeilennummer, Bereichen und Mustern zu drucken. Wir können sed auch verwenden, um das Verhalten von Head- oder Tail-Befehlen zu emulieren. Das nächste Beispiel gibt die letzten 3 Zeilen von input-file.

aus
$ sed -e :a -e '$q;N;4,$D;ba' input-file

Es ähnelt dem folgenden tail-Befehl tail -3 input-file.

44. Zeilen mit einer bestimmten Anzahl von Zeichen drucken

Es ist sehr einfach, Zeilen basierend auf der Zeichenanzahl zu drucken. Der folgende einfache Befehl druckt Zeilen mit 15 oder mehr Zeichen.

$ sed -n '/^.\{15\}/p' input-file

Verwenden Sie den folgenden Befehl, um Zeilen mit weniger als 20 Zeichen zu drucken.

$ sed -n '/^.\{20\}/!p' input-file

Wir können dies auch auf einfachere Weise mit der folgenden Methode tun.

$ sed '/^.\{20\}/d' input-file

45. Doppelte Zeilen löschen

The following sed example shows us to emulate the behavior of the Linux uniq Befehl. It deletes any two consecutive duplicate lines from the input.

$ sed '$!N; /^\(.*\)\n\1$/!P; D' input-file

However, sed can not delete all duplicate lines if the input is not sorted. Although you can sort the text using the sort command and then connect the output to sed using a pipe, it will change the orientation of the lines.

46. Deleting All Blank Lines

If your text file contains a lot of unnecessary blank lines, you may delete them using the sed utility. The below command demonstrates this.

$ sed '/^$/d' input-file
$ sed '/./!d' input-file

Both of these commands will delete any blank lines present in the specified file.

47. Deleting Last Lines of Paragraphs

You can delete the last line of all paragraphs using the following sed command. We will use a dummy filename for this example. Replace this with the name of an actual file that contains some paragraphs.

$ sed -n '/^$/{p;h;};/./{x;/./p;}' paragraphs.txt

48. Displaying the Help Page

The help page contains summarized information on all available options and usage of the sed program. You can invoke this by using the following syntax.

$ sed -h
$ sed --help

You can use any of these two commands to find a nice, compact overview of the sed utility.

49. Displaying the Manual Page

The manual page provides an in-depth discussion of sed, its usage, and all available options. You should read this carefully to understand sed clearly.

$ man sed

50. Displaying Version Information

The –version option of sed allows us to view which version of sed is installed in our machine. It is useful when debugging errors and reporting bugs.

$ sed --version

The above command will display the version information of the sed utility in your system.

Abschlussgedanken

The sed command is one of the most widely used text manipulation tools provided by Linux distributions. It is one of the three primary filtering utilities in Unix, alongside grep and awk. We have outlined 50 simple yet useful examples to help readers get started with this amazing tool. We highly recommend users to try these commands themselves to gain practical insights. Additionally, try tweaking the examples given in this guide and examine their effect. It will help you master sed quickly. Hopefully, you’ve learned the basics of sed clearly. Don’t forget to comment below if you’ve any questions.


Linux
  1. Der Linux-Sed-Befehl:Verwendung und Beispiele

  2. cp-Befehl unter Linux:7 praktische Beispiele

  3. Linux-Shutdown-Befehl:5 praktische Beispiele

  4. Praktische Beispiele für den Unzip-Befehl unter Linux

  5. 5 praktische Beispiele des dd-Befehls unter Linux

15 Praktische Beispiele für den Rsync-Befehl unter Linux

5 praktische Beispiele für Tail-Befehle unter Linux

Echo-Befehl unter Linux:7 praktische Beispiele

5 praktische Beispiele für den Read-Befehl unter Linux

Wesentliche Beispiele des ps-Befehls in Linux

Praktischer Ping-Befehl in Linux-Beispielen