Website-Suche

15 Sed-Befehlstipps für Linux-Systemadministrationsaufgaben


Jeder Systemadministrator hat täglich mit reinen Textdateien zu tun. 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 beherrschen müssen, ohne eine Google-Suche durchführen zu müssen.

In diesem Artikel stellen wir sed, den bekannten Stream-Editor, vor und geben 15 Tipps, wie Sie ihn verwenden können, um die zuvor genannten Ziele und mehr zu erreichen.

Was ist Sed Command?

Der Befehl „sed“, kurz für Stream Editor, ist ein vielseitiges und leistungsstarkes Textbearbeitungstool, das Textströme bearbeitet und es Benutzern ermöglicht, verschiedene Vorgänge an Daten durchzuführen, wie z. B. Suchen, Ersetzen, Einfügen usw löschen. „Sed“ verwendet reguläre Ausdrücke, um Muster für die Textmanipulation zu definieren, und kann für Stapelbearbeitungsaufgaben und Textverarbeitung in Skripten verwendet werden.

Eine seiner 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 Texttransformations- und Datenmanipulationsaufgaben in der Befehlszeile befassen.

Im Folgenden finden Sie einige gebräuchliche „sed“-Befehle mit Beispielen:

1. Anzeigen eines Zeilenbereichs einer Datei

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

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

2. Anzeigen der gesamten Datei mit Ausnahme eines bestimmten Bereichs

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

sed '20,35d' myfile.txt

3. Anzeigen nicht aufeinanderfolgender Linien und Bereiche

Möglicherweise interessieren Sie sich für eine Reihe nicht aufeinanderfolgender Zeilen oder für mehr als einen Bereich. Lassen Sie uns die Zeilen 5-7 und 10-13 aus tecmint.txt anzeigen:

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

Wie Sie sehen, können wir mit der Option -e eine bestimmte Aktion (in diesem Fall Zeilen drucken) für jeden Bereich ausführen.

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

Um jede Instanz des Wortes version durch story in tecmint.txt zu ersetzen, gehen Sie wie folgt vor:

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

Darüber hinaus können Sie die Verwendung von gi anstelle von g in Betracht ziehen, um die Groß-/Kleinschreibung 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 Pipeline:

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

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

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

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

6. Entfernen Sie Kommentare aus einer Datei

Manchmal werden Konfigurationsdateien mit Kommentaren geladen. Obwohl dies sicherlich nützlich ist, kann es manchmal hilfreich sein, 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 (^#) gibt den Anfang einer Zeile an, während ^$ für Leerzeilen steht. 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 #s, die nicht am Anfang einiger Zeilen stehen, daher wird *# auch verwendet, um diese zu entfernen.

7. Ersetzen Sie ein Wort in einer Datei, bei dem die Groß-/Kleinschreibung nicht berücksichtigt 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 nach bestimmten Ereignissen in einer Protokolldatei

Eine andere Verwendung von sed besteht darin, die Zeilen aus einer Datei auszugeben, die einem bestimmten regulären Ausdruck entsprechen. Beispielsweise könnten wir daran interessiert sein, die Autorisierungs- und Authentifizierungsaktivitäten anzuzeigen, die am 2. Juli stattgefunden haben, gemäß /var /log/secure meldet sich bei einem CentOS-Server an.

In diesem Fall lautet das zu suchende Muster 2. Juli 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 jede zweite Zeile eine Leerzeile in LICENSE, einer Nur-Text-Datei, 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 durch ein Semikolon getrenntes Großbuchstabe G hinzu, wenn Sie weitere Leerzeilen hinzufügen möchten. Das folgende Bild veranschaulicht das in diesem Tipp beschriebene Beispiel:

Dieser Tipp kann nützlich sein, wenn Sie eine große Konfigurationsdatei überprüfen möchten. Das Einfügen eines Leerzeichens in jeder zweiten Zeile und das Weiterleiten der Ausgabe an „weniger“ führt zu einem benutzerfreundlicheren Leseerlebnis.

10. ^M in einer Datei entfernen

Das Programm dos2unix konvertiert reine Textdateien aus der Windows-/Mac-Formatierung in Unix/Linux und entfernt dabei versteckte Zeilenumbrüche, die von einigen auf diesen Plattformen verwendeten Texteditoren eingefügt 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-Neuzeilenzeichen (^M), die später entfernt wurden mit:

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

Bitte beachten Sie, dass die Option -i eine direkte Bearbeitung anzeigt. Dann werden die Änderungen nicht auf dem Bildschirm angezeigt, sondern in der Datei gespeichert.

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

11. Erstellen Sie eine Sicherungsdatei mit dem Sed-Befehl

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 Vorkommen von this oder This (Groß- und Kleinschreibung ignorieren) durch das in myfile.txt und speichern die Originaldatei als myfile.txt.orig.

Abschließend verwenden wir das Diff-Dienstprogramm, um die Unterschiede zwischen beiden Dateien zu identifizieren:

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

12. Wortpaare in einer Datei wechseln

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.

Mit sed können wir das ziemlich einfach machen:

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

Im Bild oben sehen wir, dass Klammern als Sonderzeichen maskiert 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 Zeilenende steht.

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

13. Ersetzen von Wörtern nur, wenn eine separate Übereinstimmung gefunden wird

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

Beispielsweise möchten wir möglicherweise 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 im Gegensatz zur zweiten Zeile nicht vorkommt.

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 durch die Verwendung eines gewöhnlichen Substitutionsbefehls sed, 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 wird im folgenden Bild veranschaulicht:

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 aus TIPP #4 und extrahieren unsere IP-Adresse aus der Ausgabe des Befehls ip route.

Wir beginnen damit, nur die Zeile auszugeben, in der sich das Wort src befindet. Dann werden wir mehrere Leerzeichen in ein einziges umwandeln. Schließlich werden wir das 9. Feld ausschneiden (wobei wir ein einzelnes Leerzeichen als Feldtrennzeichen berücksichtigen), in dem sich die IP-Adresse befindet:

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

Das Bild unten veranschaulicht jeden Schritt des obigen Befehls:

Zusammenfassung

In diesem Leitfaden haben wir 15 sed-Tipps und Tricks zusammengestellt, die Sie bei Ihren täglichen Systemverwaltungsaufgaben unterstützen. Gibt es einen anderen Tipp, den Sie regelmäßig verwenden und den Sie gerne mit uns und dem Rest der Community teilen möchten?

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