Website-Suche

15 sed-Befehlstipps für Linux-Systemadministrationsaufgaben


Jeder Systemadministrator muss täglich mit reinen Textdateien umgehen. Zu wissen, wie man bestimmte Abschnitte anzeigt, wie man Wörter ersetzt und wie man Inhalte aus diesen Dateien filtert, sind Fähigkeiten, die Sie griffbereit haben müssen, ohne eine Google-Suche durchführen zu müssen.

In diesem Artikel werden wir sed, den bekannten Stream-Editor, überprüfen und 15 Tipps geben, um ihn zu verwenden, um die zuvor genannten Ziele zu erreichen, und vieles mehr.

Was ist Sed Command?

Der Befehl 'sed', kurz für Stream Editor, ist ein vielseitiges und leistungsstarkes Textbearbeitungstool, das mit Textströmen arbeitet und es Benutzern ermöglicht, verschiedene Operationen an Daten durchzuführen, z. B. Suchen, Ersetzen, Einfügen und Löschen. 'Sed' verwendet reguläre Ausdrücke, um Muster für die Textmanipulation zu definieren, und es kann für die Stapelbearbeitung von Aufgaben und die Textverarbeitung in Skripten verwendet werden.

Eine der bemerkenswerten Funktionen ist die direkte Bearbeitung, bei der Dateien direkt geändert oder Sicherungskopien erstellt werden können, während Änderungen vorgenommen werden. 'Sed' ist ein unverzichtbares Werkzeug für Systemadministratoren, Programmierer und alle, die sich mit Textumwandlungs- und Datenmanipulationsaufgaben in der Befehlszeile befassen.

Im Folgenden finden Sie einige gängige 'sed'-Befehle mit Beispielen:

1. Anzeigen eines Zeilenbereichs einer Datei

Mit Tools wie Kopf und Schwanz können wir den unteren oder oberen Rand einer Datei anzeigen. Was ist, wenn wir einen Abschnitt in der Mitte anzeigen müssen? Der folgende sed-Einzeiler gibt die Zeilen 5 bis 10 von tecmint.txt zurück:

sed -n '5,10p' tecmint.txt

2. Anzeigen der gesamten Datei mit Ausnahme eines bestimmten Bereichs

Auf der anderen Seite ist es möglich, dass Sie die gesamte Datei mit Ausnahme eines bestimmten Bereichs drucken möchten. Um die Zeilen 20 bis 35 von der tecmint.txt auszuschließen, gehen Sie wie folgt vor:

sed '20,35d' myfile.txt

3. Anzeigen von nicht aufeinanderfolgenden Zeilen und Bereichen

Es ist möglich, dass Sie an einer Reihe von nicht aufeinanderfolgenden Zeilen oder an mehr als einem Bereich interessiert sind. Sehen wir uns die Zeilen 5-7 und 10-13 aus tecmint.txt an:

sed -n -e '5,7p' -e '10,13p' tecmint.txt

Wie Sie sehen können, ermöglicht uns die Option -e, eine bestimmte Aktion (in diesem Fall Zeilen drucken) für jeden Bereich auszuführen.

4. Ersetzen von Wörtern oder Zeichenfolgen in einer Datei

Um jedes Vorkommen des Wortes "Version" in tecmint.txt durch "story" zu ersetzen, gehen Sie wie folgt vor:

sed 's/version/story/g' tecmint.txt

Darüber hinaus können Sie in Betracht ziehen, gi anstelle von g zu verwenden, um die Groß- und Kleinschreibung der Zeichen zu ignorieren:

sed 's/version/story/gi' myfile.txt

Um mehrere Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen, verwenden wir die Ausgabe des Befehls ip route show mit einer Pipeline:

ip route show | sed 's/  */ /g'

Vergleichen Sie die Ausgabe von ip route show mit und ohne die Pipeline:

5. Ersetzen von Wörtern oder Zeichenfolgen innerhalb eines Bereichs

Wenn Sie Wörter nur innerhalb eines Zeilenbereichs (z. B. 30 bis 40) ersetzen möchten, können Sie Folgendes tun:

sed '30,40 s/version/story/g' tecmint.txt

Natürlich können Sie eine einzelne Zeile durch die entsprechende Zahl anstelle eines Bereichs angeben.

6. Entfernen Sie Kommentare aus einer Datei

Manchmal werden Konfigurationsdateien mit Kommentaren geladen. Dies ist zwar sicherlich nützlich, aber es kann hilfreich sein, manchmal nur die Konfigurationsanweisungen anzuzeigen, wenn Sie sie alle auf einen Blick sehen möchten.

Um leere Zeilen oder solche, die mit # beginnen, aus der Apache-Konfigurationsdatei zu entfernen, gehen Sie wie folgt vor:

sed '/^#\|^$\| *#/d' httpd.conf

Auf das Caret-Zeichen folgt das Nummernzeichen (^#), das den Anfang einer Zeile angibt, während ^$ Leerzeilen darstellt. Die vertikalen Balken zeigen boolesche Operationen an, während der umgekehrte Schrägstrich verwendet wird, um die vertikalen Balken zu maskieren.

In diesem speziellen Fall enthält die Apache-Konfigurationsdatei Zeilen mit #, die nicht am Anfang einiger Zeilen stehen, daher wird *# verwendet, um diese ebenfalls zu entfernen.

7. Ersetzen Sie ein Wort in einer Datei, bei dem die Groß-/Kleinschreibung nicht beachtet wird

Um ein Wort, das mit Groß- oder Kleinbuchstaben beginnt, durch ein anderes Wort zu ersetzen, können wir auch sed verwenden. Zur Veranschaulichung ersetzen wir das Wort zip oder Zip durch rar in tecmint.txt:

sed 's/[Zz]ip/rar/g' tecmint.txt

8. Suchen eines bestimmten Ereignisses in einer Protokolldatei

Eine weitere Verwendung von sed besteht darin, die Zeilen aus einer Datei zu drucken, die einem bestimmten regulären Ausdruck entsprechen. Zum Beispiel könnten wir daran interessiert sein, die Autorisierungs- und Authentifizierungsaktivitäten zu sehen, die am 2. Juli gemäß dem /var/log/secure-Protokoll auf einem CentOS-Server stattgefunden haben.

In diesem Fall ist das Muster, nach dem gesucht werden soll, Jul 2 am Anfang jeder Zeile:

sed -n '/^Jul  1/ p' /var/log/secure

9. Einfügen von Leerzeichen oder Leerzeilen in eine Datei

Mit sed können wir auch Leerzeichen (Leerzeilen) für jede nicht leere Zeile in einer Datei einfügen. Um in LICENSE, einer Nur-Text-Datei, jede zweite Zeile eine Leerzeile einzufügen, gehen Sie wie folgt vor:

sed G tecmint.txt

Um zwei Leerzeilen einzufügen, gehen Sie wie folgt vor:

sed 'G;G' tecmint.txt

Fügen Sie ein großes G hinzu, das durch ein Semikolon getrennt ist, wenn Sie weitere Leerzeilen hinzufügen möchten. Die folgende Abbildung veranschaulicht das in diesem Tipp skizzierte Beispiel:

Dieser Tipp kann sich als nützlich erweisen, wenn Sie eine große Konfigurationsdatei überprüfen möchten. Wenn Sie in jeder zweiten Zeile ein Leerzeichen einfügen und die Ausgabe auf weniger umleiten, führt dies zu einem benutzerfreundlicheren Leseerlebnis.

10. Entfernen von ^M in einer Datei

Das Programm dos2unix konvertiert reine Textdateien von Windows/Mac-Formatierungen nach Unix/Linux und entfernt versteckte Zeilenumbrüche, die von einigen Texteditoren eingefügt wurden, die auf diesen Plattformen verwendet werden. Wenn es nicht auf Ihrem Linux-System installiert ist, können Sie seine Funktionalität mit sed nachahmen, anstatt es zu installieren.

Im Bild links sehen wir mehrere DOS-Zeilenumbrüche (^M), die später mit folgendem Text entfernt wurden:

sed -i 's/\r//' myfile.txt

Bitte beachten Sie, dass die Option -i die direkte Bearbeitung anzeigt. Die Änderungen werden dann nicht auf den Bildschirm zurückgesetzt, sondern in der Datei gespeichert.

Hinweis: Sie können DOS-Zeilenumbrüche einfügen, während Sie eine Datei im Vim-Editor mit Strg+V und Strg+M bearbeiten.

11. Erstellen Sie eine Sicherungsdatei mit dem Befehl sed

Im vorherigen Tipp haben wir sed verwendet, um eine Datei zu ändern, aber die Originaldatei nicht gespeichert. Manchmal ist es eine gute Idee, für alle Fälle eine Sicherungskopie der Originaldatei zu speichern.

Geben Sie dazu ein Suffix nach der Option -i (in einfachen Anführungszeichen) an, das zum Umbenennen der Originaldatei verwendet werden soll.

Im folgenden Beispiel ersetzen wir alle Instanzen von this oder This (Groß-/Kleinschreibung ignorieren) durch that in myfile.txt und speichern die Originaldatei als myfile.txt.orig.

Schließlich werden wir das diff-Dienstprogramm verwenden, um die Unterschiede zwischen beiden Dateien zu identifizieren:

sed -i'.orig' 's/this/that/gi' myfile.txt

12. Wechseln von Wortpaaren in einer Datei

Nehmen wir an, Sie haben eine Datei mit vollständigen Namen im Format Vorname, Nachname. Um die Datei angemessen zu verarbeiten, können Sie Nachname und Vorname vertauschen.

Das können wir mit sed ziemlich einfach machen:

sed 's/^\(.*\),\(.*\)$/\2\, /g' names.txt

In der obigen Abbildung sehen wir, dass Klammern, die Sonderzeichen sind, mit Escapezeichen versehen werden müssen, ebenso wie die Zahlen 1 und 2.

Diese Zahlen stellen die hervorgehobenen regulären Ausdrücke dar (die in Klammern stehen müssen):

  • 1 steht für den Anfang jeder Zeile bis zum Komma.
  • 2 ist ein Platzhalter für alles, was rechts vom Komma bis zum Ende der Zeile steht.

Die gewünschte Ausgabe wird im Format SecondColumn (Nachname) + Komma + Leerzeichen + FirstColumn (Vorname) angegeben. Fühlen Sie sich frei, es nach Belieben zu ändern.

13. Wörter nur ersetzen, wenn eine separate Übereinstimmung gefunden wird

Manchmal ist das Ersetzen aller Instanzen eines bestimmten Wortes oder einiger weniger Instanzen nicht genau das, was wir brauchen. Möglicherweise müssen wir die Ersetzung durchführen, wenn eine separate Übereinstimmung gefunden wird.

Zum Beispiel können wir start nur dann durch stop ersetzen, wenn das Wort services in derselben Zeile gefunden wird. In diesem Szenario wird Folgendes passieren:

We need to start partying at work,
but let’s remember to start all services first.

In der ersten Zeile wird start nicht durch stop ersetzt, da das Wort services in dieser Zeile nicht vorkommt, im Gegensatz zur zweiten Zeile.

# sed '/services/ s/start/stop/g' msg.txt

14. Zwei oder mehr Auswechslungen gleichzeitig durchführen

Sie können zwei oder mehr Ersetzungen in einem einzigen sed-Befehl kombinieren. Ersetzen wir die Wörter that und line in myfile.txt durch This bzw. verse.

Beachten Sie, wie dies mit einem gewöhnlichen sed-Substitutionsbefehl gefolgt von einem Semikolon und einem zweiten Substitutionsbefehl erreicht werden kann:

# sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt

Dieser Tipp ist in der folgenden Abbildung dargestellt:

15. Kombinieren von sed und anderen Befehlen

Natürlich kann sed mit anderen Linux-Befehlen kombiniert werden, um leistungsfähigere Befehle zu erstellen. Nehmen wir zum Beispiel das Beispiel in TIPP #4 und extrahieren unsere IP-Adresse aus der Ausgabe des Befehls ip route.

Wir beginnen damit, nur die Zeile zu drucken, in der sich das Wort src befindet. Dann werden wir mehrere Leerzeichen in ein einziges umwandeln. Zum Schluss schneiden wir das 9. Feld aus (unter Berücksichtigung eines einzelnen Leerzeichens als Feldtrennzeichen), in dem sich die IP-Adresse befindet:

# ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

Die folgende Abbildung veranschaulicht die einzelnen Schritte des obigen Befehls:

Zusammenfassung

In diesem Leitfaden haben wir 15 Tipps und Tricks geteilt, die Ihnen bei Ihren täglichen Systemadministrationsaufgaben helfen. Gibt es noch einen anderen Tipp, den du regelmäßig verwendest und den du mit uns und dem Rest der Community teilen möchtest?

Wenn ja, teilen Sie uns dies bitte über das untenstehende Kommentarformular mit. Auch Fragen und Kommentare sind willkommen – wir freuen uns auf Sie!

Verwandte Artikel: