Jeder Linux-Geek muss Sed und Awk kennen. Hier ist der Grund…

Jeder Linux-Geek muss Sed und Awk kennen. Hier ist der Grund… / Linux

Zwei der am meisten kriminell unterbewerteten Linux-Dienstprogramme sind Sed und Awk. Obwohl sie zugegebenermaßen ein wenig geheimnisvoll wirken können, wenn Sie große Teile des Codes oder Textes wiederholt ändern müssen oder Text analysieren müssen, sind Sed und Awk von unschätzbarem Wert.

Also was sind sie? Wie werden sie benutzt? Und wie machen sie in Kombination die Verarbeitung von Text einfacher??

Was ist Sed?

Sed wurde 1971 in Bell Labs vom legendären Computerpionier Lee E. McMahon entwickelt.

Der Name steht für Stream-Editor, und das tut es irgendwie. Sie können Textkörper oder Textströme bearbeiten programmatisch, durch eine kompakte und einfache, aber dennoch komplette Turing-Programmiersprache.

Die Funktionsweise ist einfach: Sie liest Text Zeile für Zeile in einen Puffer. Für jede Zeile werden ggf. die vordefinierten Anweisungen ausgeführt.

Zum Beispiel, wenn jemand ein Sed-Skript schreiben sollte, das das Wort ersetzt “Bier” mit “Limonade”, und dann in einer Textdatei übergeben, die den gesamten Text an enthielt “99 Flaschen Bier an der Wand”, Es würde diese Datei Zeile für Zeile durchgehen und ausdrucken “99 Flaschen Soda an der Wand”, und so weiter.

Das grundlegendste Sed-Skript ist ein Hello World-Skript. Hier verwenden wir zum Drucken das Unix-Echo-Dienstprogramm, das lediglich Strings ausgibt “Hallo Welt”. Aber wir leiten dies an Sed weiter und sagen, es zu ersetzen “Welt” mit”Dave”. Selbsterklärendes Zeug.

Echo "Hallo Welt" | sed s / world / Dave

Sie können Sed-Anweisungen auch in Dateien kombinieren, wenn Sie kompliziertere Bearbeitungen durchführen müssen. Inspiriert von diesem urkomischen Reddit-Thread werde ich die Texte zu A-Ha's bringen Nimm mich an, und ersetzen Sie jede Instanz von “ich”, “Mir”, und “Meine”, mit Greg.

Zuerst füge ich die Texte in einer Textdatei zu dem Lied hinzu tom.txt. Dann öffne ich meinen bevorzugten Texteditor (mein Favorit ist Vim. Die 7 wichtigsten Gründe, dem Vim-Texteditor eine Chance zu geben. Die 7 wichtigsten Gründe, dem Vim-Texteditor eine Chance zu geben. Ich habe jahrelang einen Texteditor danach probiert ein anderes. Sie nennen es, ich habe es ausprobiert. Ich habe jeden einzelnen dieser Redakteure für über zwei Monate als meinen täglichen Redakteur verwendet. Irgendwie habe ich… Read More, aber Nano nano vs. vim: Terminal Text Editors Vergleich von nano und vim: Vergleich von Terminal-Texteditoren Obwohl Linux für praktisch alle Benutzer so einfach zu benutzen ist, ohne das Terminal verwenden zu müssen, gibt es einige von uns, die es regelmäßig verwenden oder sind neugierig auf die Steuerung von… Read More and Gedit gedit: Einer der am meisten mit Funktionen gefüllten Klartext-Editoren [Linux & Windows] gedit: Einer der am meisten mit Funktionen gefüllten Klartext-Editoren [Linux & Windows] Wenn Sie an Klartext-Editoren denken, ist das Erste, worauf es ankommt Ihr Kopf ist die Windows-Anwendung Notepad Jobbeschreibungsstatus - einfache Funktionen für einfachen Text… (Weitere Informationen sind ausgezeichnete Optionen) und fügen Sie die folgenden Zeilen hinzu. Stellen Sie sicher, dass die erstellte Datei mit endet .sed.

Sie werden vielleicht feststellen, dass ich mich im obigen Beispiel wiederholt habe (z. B. s / me / Greg / und s / Me / Greg /). Das liegt daran, dass einige Versionen von Sed, wie die, die mit Mac OS X ausgeliefert wird, dies tun nicht Unterstützung bei Groß- und Kleinschreibung. Daher müssen wir für jedes Wort zwei Sed-Anweisungen schreiben, damit die kapitalisierte und nicht kapitalisierte Version erkannt wird.

Dies funktioniert nicht perfekt, als hätten Sie jede Instanz von ersetzt “ich”, “Mir”, und “Meine” von Hand. Denken Sie daran, wir verwenden dies nur als Übung, um zu zeigen, wie Sie Sed-Anweisungen in einem Skript zusammenfassen und 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

Lass uns langsamer werden und schauen, was das alles macht. Adleräugige Leser werden die wir bemerkt haben nicht Echo hier verwenden. Wir benutzen Cat. Während Cat den gesamten Inhalt der Datei druckt, druckt echo nur den Dateinamen. Sie haben auch bemerkt, dass wir Sed mit der “-f” Flagge. Dadurch wird das Skript als Datei geöffnet.

Das Endergebnis ist dies.

Es ist auch erwähnenswert, dass Sed reguläre Ausdrücke (REGEX) unterstützt. Damit können Sie Muster in Text mit einer speziellen und komplizierten Syntax definieren.

Hier ist ein Beispiel, wie das funktionieren könnte. Wir nehmen die oben genannten Liedtexte, verwenden aber Regex, um jede Zeile so auszudrucken tut nicht beginnen 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??

Awk ist wie Sed eine Programmiersprache für den Umgang mit großen Textkörpern. Während Sed zum Verarbeiten und Ändern von Text verwendet wird, wird Awk meistens als Werkzeug für verwendet Analyse und Berichterstattung.

Wie Sed wurde Awk in den 1970er Jahren zuerst bei Bell Labs entwickelt. Sein Name kommt nicht von dem, was das Programm ist tut, sondern die Nachnamen der einzelnen Autoren - Alfred Aho, Peter Weinberger und Brian Kernaghan.

Awk liest eine Textdatei oder einen Eingabestrom Zeile für Zeile. 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 Ziele verfolgen, sind sie zwei völlig verschiedene Sprachen mit zwei völlig unterschiedlichen Designphilosophien. Awk ähnelt eher einigen Universalsprachen. Wie wählt man eine Programmiersprache aus, um heute zu lernen und in 2 Jahren einen großartigen Job zu bekommen? Wie wählt man eine Programmiersprache, um heute zu lernen und einen großartigen Job in 2 Jahren zu bekommen? Es kann Jahre der engagierten Arbeit dauern ein wirklich guter Programmierer werden; Gibt es eine Möglichkeit, von heute an die richtige Sprache zu wählen, um morgen eingestellt zu werden? Lesen Sie mehr wie C, Python und Bash. Es hat Funktionen wie Funktionen und einen C-ähnlichen Ansatz für Dinge wie Iteration und Variablen (James Bruce erklärte, wie die Iteration funktioniert.) Die absoluten Grundlagen der Programmierung für Anfänger (Teil 2) Die absoluten Grundlagen der Programmierung für Anfänger (Teil 2) 2 unseres absoluten Anfängerleitfadens zum Programmieren, werde ich die Grundlagen von Funktionen, Rückgabewerten, Schleifen und Bedingungen erläutern. Vergewissern Sie sich, dass Sie Teil 1 gelesen haben, bevor Sie mich damit befassen. Einfach ausgedrückt, fühlt es sich eher wie eine Programmiersprache an.

Also, lass es uns ausprobieren. Mit den Texten zu Take On Me drucken wir alle Zeilen, die länger als 20 Zeichen sind.

awk 'Länge ($ 0)> 80' tom.txt 

Das nächste Beispiel habe ich schamlos aus der offiziellen 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 der Funktionsweise von Iterationen und Variablen. Erstellen Sie zuerst 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 Freq) printf "% s \ t% d \ n", Wort, Freq [Wort]

Speichern Sie es und führen Sie es mit dem folgenden Befehl aus.

awk -f WordCount.awk tom.txt


Cool, richtig? Sie werden wahrscheinlich feststellen, dass sie nicht in irgendeiner Reihenfolge sind. Sie können Sortieren Sie die Ergebnisse mit dem Unix-Sortierprogramm. Aber wir lassen das für einen anderen Tag. Wir werden es einfach halten.

Die zwei kombinieren

Awk und Sed sind in Kombination unglaublich mächtig. Sie können dies tun, indem Sie Unix-Pipes verwenden. Das sind die “|” Bits zwischen Befehlen.

Versuchen wir folgendes: Wir listen alle Zeilen in Take On Me auf, die mehr als 20 Zeichen enthalten, und verwenden Awk. Dann werden wir alle Zeilen entfernen, die mit beginnen “Nehmen”. Zusammen sieht das 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 erscheint. Es sieht ein bisschen so aus:

cat tom.txt | sed / ^ Take / d | awk -f WordCount.awk

Die Kraft von Sed und Awk

In einem einzigen Artikel können Sie nur so viel erklären. Aber ich hoffe, ich habe gezeigt, wie unglaublich kraftvoll Sed und Awk sind. Einfach ausgedrückt, sind sie ein Kraftwerk für die Textverarbeitung.

Warum sollte es dich interessieren? Neben der Tatsache, dass Sie nie wissen, wann Sie vorhersehbare, sich wiederholende Änderungen an einem Textdokument vornehmen müssen, sind Sed und Awk ideal für das Analysieren von Protokolldateien. Dies ist besonders praktisch, wenn Sie versuchen, ein Problem in Ihrem LAMP-Server zu debuggen. Für SSH-only-Webhosting angemeldet? Machen Sie sich keine Sorgen - installieren Sie einfach alle Web-Software, die für das reine SSH-Webhosting angemeldet ist. Machen Sie sich keine Sorgen - Installieren Sie einfach jede Web-Software. Sie wissen nicht, was Linux über seine leistungsstarke Befehlszeile ausübt? Mach dir keine Sorgen mehr. Weitere Informationen finden Sie in Ihren Zugriffsprotokollen, um festzustellen, ob Ihr Server gehackt wurde.

Haben Sie eine interessante Verwendung für Sed und Awk gefunden? Gibt es andere Linux-Dienstprogramme, von denen Sie glauben, dass sie unterbewertet sind? Lass es mich in den Kommentaren wissen, und wir werden uns unterhalten.

Erfahren Sie mehr über: Terminal, Texteditor.