Jeder Systemadministrator hat täglich mit Klartextdateien zu tun. Zu wissen, wie bestimmte Abschnitte angezeigt, Wörter ersetzt und Inhalte aus diesen Dateien herausgefiltert werden, sind Fähigkeiten, die Sie zur Hand 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 zur Verwendung geben, um die oben genannten Ziele und mehr zu erreichen.
Werkzeuge wie Kopf und Schwanz erlauben Sie uns, den unteren oder oberen Rand einer Datei anzuzeigen. Was ist, wenn wir einen Abschnitt in der Mitte anzeigen müssen? Der folgende sed-Einzeiler gibt Zeilen zurück 5 durch 10 aus meinedatei.txt:
# sed -n '5,10p' myfile.txt.
Andererseits ist es möglich, dass Sie die gesamte Datei mit Ausnahme eines bestimmten Bereichs drucken möchten. Zeilen ausschließen 20 durch 35 aus meinedatei.txt, tun:
# sed '20,35d' myfile.txt.
Es ist möglich, dass Sie an einer Reihe von nicht aufeinanderfolgenden Zeilen oder an mehr als einem Bereich interessiert sind. Lassen Sie uns Zeilen anzeigen 5-7 und 10-13 aus meinedatei.txt:
# sed -n -e '5,7p' -e '10,13p' myfile.txt.
Wie Sie sehen können, ist die -e
Option ermöglicht es uns, eine bestimmte Aktion (in diesem Fall Zeilen drucken) für jeden Bereich auszuführen.
Um jedes Vorkommen des Wortes zu ersetzen Ausführung
mit Geschichte
In meinedatei.txt, tun:
# sed 's/version/story/g' myfile.txt.
Darüber hinaus sollten Sie die Verwendung von. in Betracht ziehen gi
anstatt g
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 von IP-Routenshow
und eine Pipeline:
# IP-Routenshow | sed 's/ */ /g'
Vergleichen Sie die Ausgabe von IP-Routenshow
mit und ohne Rohrleitung:
Wenn Sie Wörter nur innerhalb eines Zeilenbereichs ersetzen möchten (30 durch 40, zum Beispiel), können Sie Folgendes tun:
# sed '30,40 s/version/story/g' myfile.txt.
Natürlich können Sie anstelle eines Bereichs eine einzelne Zeile durch die entsprechende Nummer angeben.
Manchmal werden Konfigurationsdateien mit Kommentaren geladen. Dies ist sicherlich nützlich, aber manchmal kann es hilfreich sein, nur die Konfigurationsanweisungen anzuzeigen, wenn Sie alle auf einen Blick sehen möchten.
So entfernen Sie leere Zeilen oder Zeilen, die mit beginnen #
Führen Sie aus der Apache-Konfigurationsdatei Folgendes aus:
# sed '/^#\|^$\| *#/d' httpd.conf.
Das Caret-Zeichen gefolgt vom Nummernzeichen (^#)
bezeichnet den Anfang einer Zeile, während ^$
stellt Leerzeilen dar. 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
nicht am Anfang einiger Zeilen, also *#
wird verwendet, um diese ebenfalls zu entfernen.
Um ein Wort, das mit Groß- oder Kleinbuchstaben beginnt, durch ein anderes Wort zu ersetzen, können wir auch sed verwenden. Ersetzen wir zur Veranschaulichung das Wort Postleitzahl oder Reißverschluss mit selten in meinedatei.txt:
# sed 's/[Zz]ip/rar/g' myfile.txt.
Nicht verpassen:Verwenden Sie Awk mit regulären Ausdrücken, um Text in Dateien zu filtern
Eine andere 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 anzuzeigen, die am 2. Juli, nach dem /var/log/secure einloggen CentOS 7 Server.
In diesem Fall ist das zu suchende Muster 2. Juli am Anfang jeder Zeile:
# sed -n '/^Jul 1/p' /var/log/secure.
Mit sed, können wir auch Leerzeichen (Leerzeilen) für jede nicht leere Zeile in einer Datei einfügen. Um eine Leerzeile in jede zweite Zeile einzufügen LIZENZ, eine reine Textdatei, tun Sie:
# sed G myfile.txt.
Um zwei Leerzeilen einzufügen, gehen Sie wie folgt vor:
# sed 'G; G' myfile.txt.
Hinzufügen Großbuchstaben G durch Semikolon getrennt, wenn Sie weitere Leerzeilen hinzufügen möchten. Die folgende Abbildung 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 jede zweite Zeile und das Umleiten der Ausgabe auf weniger führen zu einem freundlicheren Leseerlebnis.
Das dos2unix Programm konvertiert reine Textdateien von der Windows/Mac-Formatierung in Unix/Linux und entfernt versteckte Zeilenumbrüche, die von einigen Texteditoren, die auf diesen Plattformen verwendet werden, eingefügt wurden. Wenn es nicht in Ihrem Linux-System installiert ist, können Sie seine Funktionalität mit nachahmen sed 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 -ich
Option zeigt direkte Bearbeitung an. Dann werden die Änderungen nicht auf den Bildschirm zurückgegeben, sondern in der Datei gespeichert.
Notiz: Sie können DOS-Neuzeilenzeichen einfügen, während Bearbeiten einer Datei im vim-Editor mit Strg+V
und Strg+M
.
Im vorherigen Tipp haben wir verwendet sed 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 dem an -ich
Option (in einfachen Anführungszeichen), die zum Umbenennen der Originaldatei verwendet werden soll.
Im folgenden Beispiel ersetzen wir alle Instanzen von Das oder Dies (Fall ignorieren) damit in meinedatei.txt, und wir speichern die Originaldatei als myfile.txt.orig.
Schließlich verwenden wir diff-Dienstprogramm um die Unterschiede zwischen beiden Dateien zu identifizieren:
# sed -i'.orig' 's/this/that/gi' myfile.txt.
Nehmen wir an, Sie haben eine Datei mit vollständigen Namen im Format Vorname, Familienname, Nachname. Um die Datei angemessen zu verarbeiten, möchten Sie möglicherweise wechseln Familienname, Nachname und Vorname.
Das können wir mit sed ziemlich einfach:
# sed 's/^\(.*\),\(.*\)$/\, /g' names.txt.
In der Abbildung oben können wir sehen, dass Klammern als Sonderzeichen ebenso wie die Zahlen mit Escapezeichen versehen werden müssen 1 und 2.
Diese Zahlen stellen die hervorgehobenen regulären Ausdrücke dar (die in Klammern stehen müssen):
Die gewünschte Ausgabe wird im Format angezeigt Zweite Spalte (Familienname, Nachname) + Komma + Raum + Erste Spalte (Vorname). Fühlen Sie sich frei, es zu ändern, was Sie möchten.
Manchmal ist es nicht genau das, was wir brauchen, alle Instanzen eines bestimmten Wortes oder einige zufällig zu ersetzen. Möglicherweise müssen wir die Ersetzung durchführen, wenn eine separate Übereinstimmung gefunden wird.
Zum Beispiel möchten wir vielleicht ersetzen starten mit stoppen nur wenn das Wort Dienste in derselben Zeile steht. In diesem Szenario passiert Folgendes:
Wir müssen anfangen, bei der Arbeit zu feiern, aber denken wir daran, zuerst alle Dienste zu starten.
In der ersten Zeile, starten wird nicht ersetzt durch stoppen da das Wort Dienstleistungen in dieser Zeile im Gegensatz zur zweiten Zeile nicht vorkommt.
# sed '/services/s/start/stop/g' msg.txt.
Sie können zwei oder mehr Substitutionen zu einer einzigen kombinieren sed Befehl. Ersetzen wir die Wörter that und line in meinedatei.txt mit Dies und Vers, bzw.
Beachten Sie, wie dies mit einem gewöhnlichen sed Ersetzungsbefehl gefolgt von einem Semikolon und einem zweiten Ersetzungsbefehl:
# sed -i ist/das/diese/gi; s/line/verse/gi' myfile.txt.
Dieser Tipp ist in der folgenden Abbildung dargestellt:
Natürlich, sed kann mit anderen Tools kombiniert werden, um leistungsfähigere Befehle zu erstellen. Nehmen wir zum Beispiel das Beispiel in TIPP #4 und extrahieren Sie unsere IP-Adresse aus der Ausgabe des IP-Route
Befehl.
Wir beginnen damit, nur die Zeile zu drucken, in der das Wort src
ist. Dann werden wir mehrere Leerzeichen in ein einziges umwandeln. Schließlich schneiden wir die 9. Feld (unter Berücksichtigung eines einzelnen Leerzeichens als Feldtrennzeichen), in dem die IP-Adresse steht:
# IP-Routenshow | sed -n '/src/p' | sed -e 's/ */ /g' | Schnitt -d' ' -f9.
Das Bild unten veranschaulicht jeden Schritt des obigen Befehls:
In diesem Leitfaden haben wir geteilt 15 sed Tipps und Tricks um Sie bei Ihren täglichen Systemadministrationsaufgaben zu unterstützen. Gibt es einen anderen Tipp, den Sie regelmäßig verwenden und den Sie mit uns und dem Rest der Community teilen möchten?
Wenn ja, können Sie uns dies gerne über das unten stehende Kommentarformular mitteilen. Auch Fragen und Kommentare sind willkommen – wir freuen uns auf Sie!
Nicht verpassen:Beherrschen des Linux-Befehls „Awk“ mit Tipps und Tricks