Website-Suche

So verwenden Sie Awk und reguläre Ausdrücke zum Filtern von Text oder Zeichenfolgen in Dateien


Wenn wir unter Unix/Linux bestimmte Befehle ausführen, um Text aus einer Zeichenfolge oder Datei zu lesen oder zu bearbeiten, versuchen wir meistens, die Ausgabe nach einem bestimmten Abschnitt von Interesse zu filtern. Hier bietet sich die Verwendung regulärer Ausdrücke an.

Lesen Sie auch: 10 nützliche Linux-Verkettungsoperatoren mit praktischen Beispielen

Was sind reguläre Ausdrücke?

Ein regulärer Ausdruck kann als Zeichenfolge definiert werden, die mehrere Zeichenfolgen darstellt. Eines der wichtigsten Dinge an regulären Ausdrücken ist, dass Sie damit die Ausgabe eines Befehls oder einer Datei filtern, einen Abschnitt einer Text- oder Konfigurationsdatei bearbeiten usw. können.

Merkmale des regulären Ausdrucks

Reguläre Ausdrücke bestehen aus:

  1. Gewöhnliche Zeichen wie Leerzeichen, Unterstrich(_), A-Z, a-z, 0-9.
  2. Zu den Meta-Zeichen, die zu gewöhnlichen Zeichen erweitert werden, gehören:

    1. (.) es entspricht jedem einzelnen Zeichen außer einem Zeilenumbruch.
    2. (*) Es stimmt mit null oder mehreren Existenzen des unmittelbar vorangehenden Zeichens überein.
    3. [ Zeichen(e) ] Es stimmt mit einem der in Zeichen(e) angegebenen Zeichen überein. Man kann auch einen Bindestrich (-) verwenden, um eine Reihe von Zeichen zu bezeichnen, z als [a-f], [1-5] usw.
    4. ^ entspricht dem Anfang einer Zeile in einer Datei.
    5. $ entspricht dem Zeilenende in einer Datei.
    6. \ ist ein Escape-Zeichen.

Um Text zu filtern, muss man ein Textfiltertool wie awk verwenden. Sie können sich awk als eine eigene Programmiersprache vorstellen. Im Rahmen dieses Leitfadens zur Verwendung von awk werden wir es jedoch als einfaches Befehlszeilen-Filtertool behandeln.

Die allgemeine Syntax von awk lautet:

awk 'script' filename

Dabei ist 'script' eine Reihe von Befehlen, die von awk verstanden und für die Datei Dateiname ausgeführt werden.

Es funktioniert, indem es eine bestimmte Zeile in der Datei liest, eine Kopie der Zeile erstellt und dann das Skript in der Zeile ausführt. Dies wird in allen Zeilen der Datei wiederholt.

Das 'script' hat die Form '/pattern/ action', wobei pattern ein regulärer Ausdruck und die action ist > ist das, was awk tun wird, wenn es das angegebene Muster in einer Zeile findet.

So verwenden Sie das Awk-Filtertool unter Linux

In den folgenden Beispielen konzentrieren wir uns auf die Metazeichen, die wir oben unter den Funktionen von awk besprochen haben.

Ein einfaches Beispiel für die Verwendung von awk:

Das folgende Beispiel druckt alle Zeilen in der Datei /etc/hosts, da kein Muster angegeben ist.

awk '//{print}'/etc/hosts

Verwenden Sie Awk mit Muster:

Im folgenden Beispiel wurde ein Muster localhost angegeben, sodass awk eine Zeile mit localhost in der Datei /etc/hosts findet.

awk '/localhost/{print}' /etc/hosts 

Verwenden von Awk mit (.) Platzhalter in einem Muster

Der (.) stimmt mit Zeichenfolgen überein, die im folgenden Beispiel loc, localhost, localnet enthalten.

Das heißt * l some_single_character c *.

awk '/l.c/{print}' /etc/hosts

Verwenden von Awk mit (*)-Zeichen in einem Muster

Es werden Zeichenfolgen gefunden, die localhost, localnet, lines, capable enthalten, wie im folgenden Beispiel:

awk '/l*c/{print}' /etc/localhost

Sie werden auch feststellen, dass (*) versucht, eine möglichst lange Übereinstimmung zu erzielen, die erkannt werden kann.

Schauen wir uns einen Fall an, der dies demonstriert. Nehmen wir den regulären Ausdruck t*t, der bedeutet, dass Zeichenfolgen gefunden werden, die mit dem Buchstaben t beginnen und mit t enden in der Zeile unten:

this is tecmint, where you get the best good tutorials, how to's, guides, tecmint. 

Wenn Sie das Muster /t*t/ verwenden, erhalten Sie folgende Möglichkeiten:

this is t
this is tecmint
this is tecmint, where you get t
this is tecmint, where you get the best good t
this is tecmint, where you get the best good tutorials, how t
this is tecmint, where you get the best good tutorials, how tos, guides, t
this is tecmint, where you get the best good tutorials, how tos, guides, tecmint

Und das Platzhalterzeichen (*) in /t*t/ ermöglicht es awk, die letzte Option auszuwählen:

this is tecmint, where you get the best good tutorials, how to's, guides, tecmint

Verwenden von Awk mit set [Zeichen]

Nehmen Sie zum Beispiel den Satz [al1], hier stimmt awk mit allen Zeichenfolgen überein, die das Zeichen a oder l oder 1 enthalten in einer Zeile in der Datei /etc/hosts.

awk '/[al1]/{print}' /etc/hosts

Das nächste Beispiel gleicht Zeichenfolgen ab, die entweder mit K oder k beginnen, gefolgt von T:

awk '/[Kk]T/{print}' /etc/hosts 

Angeben von Zeichen in einem Bereich

Zeichen mit awk verstehen:

  1. [0-9] bedeutet eine einzelne Zahl
  2. [a-z] bedeutet Übereinstimmung mit einem einzelnen Kleinbuchstaben
  3. [A-Z] bedeutet Übereinstimmung mit einem einzelnen Großbuchstaben
  4. [a-zA-Z] bedeutet Übereinstimmung mit einem einzelnen Buchstaben
  5. [a-zA-Z 0-9] bedeutet Übereinstimmung mit einem einzelnen Buchstaben oder einer einzelnen Zahl

Schauen wir uns unten ein Beispiel an:

awk '/[0-9]/{print}' /etc/hosts 

Im obigen Beispiel enthält jede Zeile aus der Datei /etc/hosts mindestens eine einzelne Zahl [0-9].

Verwenden Sie Awk mit dem Metazeichen (^).

Es entspricht allen Zeilen, die mit dem bereitgestellten Muster beginnen, wie im folgenden Beispiel:

awk '/^fe/{print}' /etc/hosts
awk '/^ff/{print}' /etc/hosts

Verwenden Sie Awk mit dem Metazeichen ($).

Es entspricht allen Zeilen, die mit dem bereitgestellten Muster enden:

awk '/ab$/{print}' /etc/hosts
awk '/ost$/{print}' /etc/hosts
awk '/rs$/{print}' /etc/hosts

Verwenden Sie Awk mit dem Escape-Zeichen (\).

Es ermöglicht Ihnen, das darauf folgende Zeichen als Literal zu betrachten, es also so zu betrachten, wie es ist.

Im folgenden Beispiel gibt der erste Befehl die gesamte Zeile in der Datei aus, der zweite Befehl gibt nichts aus, weil ich eine Zeile mit 25,00 $ abgleichen möchte, aber kein Escape-Zeichen verwendet wird.

Der dritte Befehl ist korrekt, da ein Escape-Zeichen verwendet wurde, um $ so zu lesen, wie es ist.

awk '//{print}' deals.txt
awk '/$25.00/{print}' deals.txt
awk '/\$25.00/{print}' deals.txt

Zusammenfassung

Das ist noch nicht alles mit dem Befehlszeilen-Filtertool awk, die obigen Beispiele zeigen die Grundfunktionen von awk. In den nächsten Teilen werden wir uns mit der Verwendung komplexer Funktionen von awk befassen. Vielen Dank fürs Durchlesen und für eventuelle Ergänzungen oder Klarstellungen. Schreiben Sie einen Kommentar im Kommentarbereich.