Werbung
Zwei der am meisten kriminell unterschätzten Linux-Dienstprogramme sind Sed und Awk. Obwohl sie zugegebenermaßen etwas arkan wirken können, sind Sed und Awk von unschätzbarem Wert, wenn Sie jemals wiederholt Änderungen an großen Code- oder Textstücken vornehmen müssen oder wenn Sie jemals Text analysieren müssen.
Also, was sind sie? Wie werden sie verwendet? Und wie erleichtern sie zusammen die Verarbeitung von Text?
Was ist Sed?
Sed wurde 1971 bei entwickelt Bell Labs, vom legendären Computerpionier Lee E. McMahon.
Der Name steht für Stream-Editorund das ist es auch. Hier können Sie Textkörper oder Textströme bearbeiten programmatischdurch eine kompakte und einfache, aber Turing-vollständige Programmiersprache.
Die Funktionsweise ist einfach: Es liest Text Zeile für Zeile in einen Puffer. Gegebenenfalls werden für jede Zeile die vordefinierten Anweisungen ausgeführt.
Zum Beispiel, wenn jemand ein Sed-Skript schreiben sollte, das das Wort „Bier“ durch „Soda“ ersetzt und dann in einer Textdatei übergeben wird, die das gesamte enthält Texte zu "99 Flaschen Bier an der Wand", es würde diese Datei Zeile für Zeile durchgehen und "99 Flaschen Soda an der Wand" ausdrucken, und so weiter auf.
Das grundlegendste Sed-Skript ist ein Hello World-Skript. Hier verwenden wir das Unix Echo-Dienstprogramm, das lediglich Zeichenfolgen ausgibt, um „Hello World“ zu drucken. Aber wir leiten dies an Sed weiter und sagen ihm, dass er "World" durch "Dave" ersetzen soll. Selbsterklärendes Zeug.
Echo "Hallo Welt" | sed s / world / Dave
Sie können Sed-Anweisungen auch zu Dateien kombinieren, wenn Sie etwas kompliziertere Bearbeitungen vornehmen müssen. Inspiriert von dieser lustige Reddit-ThreadIch werde die Texte zu A-Ha bringen Nimm es mit mir aufund ersetzen Sie jede Instanz von "Ich", "Ich" und "Mein" durch Greg.
Zuerst füge ich den Text des Songs in eine Textdatei mit dem Namen ein tom.txt. Dann öffne ich meinen bevorzugten Texteditor (meinen Favorit ist Vim Die 7 wichtigsten Gründe, dem Vim-Texteditor eine Chance zu gebenIch habe jahrelang einen Texteditor nach dem anderen ausprobiert. Sie nennen es, ich habe es versucht. Ich habe jeden dieser Editoren über zwei Monate lang als meinen primären täglichen Editor verwendet. Irgendwie ... Weiterlesen , aber Nano Nano vs. vim: Terminal-Texteditoren im VergleichObwohl Linux für praktisch jeden einfach genug geworden ist, ohne das Terminal jemals benutzen zu müssen, gibt es einige von uns, die es regelmäßig benutzen oder neugierig sind, wie man es steuern kann ... Weiterlesen und Gedit gedit: Einer der funktionsreichsten Nur-Text-Editoren [Linux & Windows]Wenn Sie an Nur-Text-Editoren denken, ist das erste, was Ihnen in den Sinn kommt, die Windows-Editor-Anwendung. Es macht genau das, was in seiner Stellenbeschreibung angegeben ist - einfache Funktionen für einen einfachen Text ... Weiterlesen sind beide ausgezeichnete Möglichkeiten) und fügen Sie die folgenden Zeilen hinzu. Stellen Sie sicher, dass die von Ihnen erstellte Datei endet .sed.
Möglicherweise stellen Sie fest, dass ich mich im obigen Beispiel wiederholt habe (z. B. s / me / Greg / und s / Me / Greg /). Dies liegt daran, dass einige Versionen von Sed, wie die mit Mac OS X gelieferte, dies tun nicht Unterstützung für Matching ohne Berücksichtigung der Groß- und Kleinschreibung. Infolgedessen müssen wir für jedes Wort zwei Sed-Anweisungen schreiben, damit die groß- und nicht großgeschriebene Version erkannt wird.
Dies funktioniert nicht perfekt, als hätten Sie jede Instanz von "Ich", "Ich" und "Mein" von Hand ersetzt. Denken Sie daran, wir verwenden dies nur als Übung, um zu demonstrieren, wie Sie Sed-Anweisungen in einem Skript gruppieren und sie dann mit einem einzigen Befehl ausführen können.
Dann müssen wir die Datei aufrufen. Dazu führen wir diesen Befehl aus.
cat tom.txt | sed -f greg.sed
Lassen Sie uns langsamer werden und schauen, was dies bewirkt. Adleraugen-Leser werden bemerkt haben, dass wir es sind nicht mit Echo hier. Wir verwenden Cat. Dies liegt daran, dass Cat zwar den gesamten Inhalt der Datei druckt, Echo jedoch nur den Dateinamen druckt. Sie haben auch bemerkt, dass wir Sed mit der Flagge "-f" ausführen. Dies weist es an, das Skript als Datei zu öffnen.
Das Endergebnis ist dies.
Es ist auch erwähnenswert, dass Sed reguläre Ausdrücke (REGEX) unterstützt. Mit diesen können Sie Muster im Text mithilfe einer speziellen und komplizierten Syntax definieren.
Hier ist ein Beispiel, wie das funktionieren könnte. Wir werden die oben genannten Songtexte verwenden, aber Regex verwenden, um jede Zeile auszudrucken nicht Beginnen Sie mit "Nehmen".
cat tom.txt | sed / ^ Take / d
Sed ist natürlich unglaublich nützlich. In Kombination mit Awk ist es jedoch noch leistungsfähiger.
Was ist Awk?
Awkist wie Sed eine Programmiersprache für den Umgang mit großen Textmengen. Während Sed zum Verarbeiten und Ändern von Text verwendet wird, wird Awk hauptsächlich als Werkzeug für verwendet Analyse und Berichterstattung.
Wie Sed wurde Awk erstmals in den 1970er Jahren bei Bell Labs entwickelt. Der Name stammt nicht von dem Programm tut, sondern die Nachnamen der einzelnen Autoren - Alfred Aho, Peter Weinberger und Brian Kernaghan.
Awk liest eine Textdatei oder einen Eingabestream zeilenweise. Jede Zeile wird gescannt, um festzustellen, ob sie mit einem vordefinierten Muster übereinstimmt. Wenn eine Übereinstimmung gefunden wird, wird eine Aktion ausgeführt.
Obwohl Sed und Awk ähnliche Zwecke verfolgen, handelt es sich um zwei völlig unterschiedliche Sprachen mit zwei völlig unterschiedlichen Designphilosophien. Awk ähnelt eher einigen Allzwecksprachen Wie man eine Programmiersprache auswählt, um heute zu lernen und in 2 Jahren einen tollen Job zu bekommenEs kann Jahre engagierter Arbeit dauern, um ein wirklich guter Programmierer zu werden. Gibt es also eine Möglichkeit, die richtige Sprache für den Start ab heute zu wählen, um morgen eingestellt zu werden? Weiterlesen , wie C, Python und Bash. Es hat Dinge wie Funktionen und einen eher C-ähnlichen Ansatz für Dinge wie Iteration und Variablen (James Bruce erklärte, wie Iteration funktioniert Die absoluten Grundlagen der Programmierung für Anfänger (Teil 2)In Teil 2 unseres absoluten Anfängerleitfadens zur Programmierung werde ich die Grundlagen von Funktionen, Rückgabewerten, Schleifen und Bedingungen behandeln. Stellen Sie sicher, dass Sie Teil 1 gelesen haben, bevor Sie sich mit diesem Thema befassen. Weiterlesen ). Einfach ausgedrückt fühlt es sich eher wie eine Programmiersprache an.
Probieren wir es also aus. Mit den Texten für "Take On Me" werden alle Zeilen gedruckt, die länger als 20 Zeichen sind.
awk 'Länge ($ 0)> 80' tom.txt
Das nächste Beispiel habe ich schamlos abgeschnitten von die offizielle Awk-Dokumentation. Aber es ist ein großartiges Beispiel für das Potenzial dieser mächtigen, aber winzigen Sprache. Es ist auch eine großartige Demonstration, wie Dinge wie Iteration und Variablen darin funktionieren. Erstellen Sie zunächst eine Datei mit dem Namen "WordCount.awk" und fügen Sie die folgenden Zeilen hinzu.
{für (i = 1; i <= NF; i ++) freq [$ i] ++ }
END {für (Wort in Frequenz) printf "% s \ t% d \ n", Wort, Frequenz [Wort] }
Speichern Sie es und führen Sie es dann mit dem folgenden Befehl aus.
awk -f WordCount.awk tom.txt
Cool, oder? Sie werden wahrscheinlich feststellen, dass sie in keiner Reihenfolge angeordnet sind. Du kann Sortieren Sie die Ergebnisse mit dem Unix-Sortierdienstprogramm. Aber wir lassen das für einen anderen Tag. Wir werden es einfach halten.
Die beiden kombinieren
Awk und Sed sind beide unglaublich kraftvoll, wenn sie kombiniert werden. Sie können dies mithilfe von Unix-Pipes tun. Das sind die "|" Bits zwischen Befehlen.
Versuchen wir Folgendes: Wir werden mit Awk alle Zeilen in Take On Me auflisten, die mehr als 20 Zeichen enthalten. Dann werden wir alle Zeilen entfernen, die mit beginnen "Nehmen". Zusammen sieht alles so aus:
awk 'Länge ($ 0)> 20' tom.txt | sed / ^ Take / d
Und produziert dies:
Lassen Sie uns das jetzt umdrehen. Wir werden zunächst alle Zeilen entfernen, die mit Take beginnen, und sie dann an Awk weiterleiten, wo wir zählen, wie oft jedes Wort vorkommt. Es sieht ein bisschen so aus:
cat tom.txt | sed / ^ Take / d | awk -f WordCount.awk
Die Kraft von Sed und Awk
Es gibt nur so viel, was Sie in einem einzigen Artikel erklären können. Aber ich hoffe, ich habe gezeigt, wie unermesslich mächtig Sed und Awk sind. Einfach ausgedrückt, sie sind ein Kraftpaket für die Textverarbeitung.
Also, warum sollte es dich interessieren? Neben der Tatsache, dass Sie nie wissen, wann Sie vorhersehbare, sich wiederholende Änderungen an einem Textdokument vornehmen müssen, eignen sich Sed und Awk hervorragend zum Parsen von Protokolldateien. Dies ist besonders praktisch, wenn Sie versuchen, ein Problem zu beheben in Ihrem LAMP-Server Für Nur-SSH-Webhosting angemeldet? Keine Sorge - Installieren Sie einfach jede Web-SoftwareSie wissen nicht, wie man Linux über die leistungsstarke Befehlszeile bedient? Mach dir keine Sorgen mehr. Weiterlesen oder überprüfen Sie in Ihren Zugriffsprotokollen, ob Ihr Server gehackt wurde.
Haben Sie eine interessante Verwendung für Sed und Awk gefunden? Gibt es andere Linux-Dienstprogramme, die Ihrer Meinung nach unterschätzt werden? Lass es mich in den Kommentaren unten wissen und wir werden uns unterhalten.
Matthew Hughes ist ein Softwareentwickler und Autor aus Liverpool, England. Er wird selten ohne eine Tasse starken schwarzen Kaffee in der Hand gefunden und liebt sein Macbook Pro und seine Kamera. Sie können seinen Blog unter lesen http://www.matthewhughes.co.uk und folge ihm auf Twitter unter @matthewhughes.