So filtern Sie Text oder Zeichenfolgen mit Awk und regulären Ausdrücken – Teil 1

Wenn wir bestimmte Befehle in Linux ausführen, um Text aus einer Zeichenkette oder einer Datei zu lesen oder zu bearbeiten, versuchen wir oft, die Ausgabe auf einen bestimmten interessanten Abschnitt zu filtern. Hier kommen reguläre Ausdrücke zum Einsatz.

Was sind reguläre Ausdrücke?

A regular expression can be defined as strings that represent several sequences of characters. One of the most important things about regular expressions is that they allow you to filter the output of a command or file, edit a section of a text or configuration file, and so on.

Eigenschaften von regulären Ausdrücken

Reguläre Ausdrücke bestehen aus:

  • gewöhnlichen Zeichen wie Leerzeichen, Unterstrich(_), A-Z, a-z, 0-9.
  • Meta-Zeichen, die zu gewöhnlichen Zeichen erweitert werden, einschließlich:
    • (.) es trifft auf jedes einzelne Zeichen außer einem Zeilenumbruch.
    • (*) es trifft auf null oder mehr Vorkommnisse des unmittelbaren Zeichens, das es vorangeht.
    • [ Zeichen(e) ] es trifft auf jedes einzelne der in den Zeichen angegebenen, man kann auch einen Bindestrich (-) verwenden, um eine Zeichenkette zu bedeuten, wie z.B. [a-f], [1-5], usw.
    • ^ es trifft am Anfang einer Dateilinie.
    • $ trifft am Ende der Dateilinie.
    • \ es ist ein Escape-Zeichen.

Um Text zu filtern, muss man ein Textfilter-Tool wie awk verwenden. Man kann sich awk als eine eigene Programmiersprache vorstellen. Aber für den Umfang dieses Leitfadens zur Verwendung von awk werden wir es als einfaches Befehlszeilenfilter-Tool behandeln.

Die allgemeine Syntax von awk ist:

awk 'script' filename

Wobei 'Skript' eine Reihe von Befehlen ist, die von awk verstanden und auf die Datei, Dateiname, ausgeführt werden.

Es funktioniert, indem es eine gegebene Zeile in der Datei liest, eine Kopie der Zeile erstellt und dann das Skript auf der Zeile ausführt. Dies wird für alle Zeilen in der Datei wiederholt.

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

Wie man das Awk-Filtering-Tool in Linux verwendet

In den folgenden Beispielen werden wir uns auf die Meta-Zeichen konzentrieren, über die wir oben unter den Funktionen von awk gesprochen haben.

Drucken aller Zeilen aus einer Datei unter Verwendung von Awk

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

awk '//{print}'/etc/hosts
Awk Prints All Lines in a File

Verwenden von Awk-Mustern: Übereinstimmende Zeilen mit ‚localhost‘ in der Datei

Im folgenden Beispiel wurde ein Muster localhost angegeben, sodass Awk die Zeile mit localhost in der Datei /etc/hosts abgleicht.

awk '/localhost/{print}' /etc/hosts 
Awk Print Given Matching Line in a File

Awk mit (.) Wildcard in einem Muster verwenden

Das (.) wird Zeichenfolgen passend zu loc, localhost, localnet im folgenden Beispiel abgleichen.

Das bedeutet * l ein_einzelnes_Zeichen c *.

awk '/l.c/{print}' /etc/hosts
Use Awk to Print Matching Strings in a File

Awk mit (*) Zeichen in einem Muster verwenden

Es wird Zeichenfolgen passend zu localhost, localnet, lines, capable im folgenden Beispiel abgleichen:

awk '/l*c/{print}' /etc/localhost
Use Awk to Match Strings in File

Sie werden auch feststellen, dass (*) versucht, die längstmögliche Übereinstimmung zu erkennen, die es erfassen kann.

Lassen Sie uns einen Fall betrachten, der dies zeigt, nehmen Sie den regulären Ausdruck t*t, der Zeichenfolgen passt, die mit dem Buchstaben t beginnen und mit t enden, in der folgenden Zeile:

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

Sie erhalten die folgenden Möglichkeiten, wenn Sie das Muster /t*t/ verwenden:

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 (*) im Wildcard-Zeichen /t*t/ ermöglicht es Awk, die letzte Option zu wählen:

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

Awk mit Satz [ Zeichen(n) ] verwenden

Nehmen Sie zum Beispiel die Gruppe [al1], hier wird Awk alle Zeichenfolgen abgleichen, die den Buchstaben a oder l oder 1 in einer Zeile in der Datei /etc/hosts enthalten.

awk '/[al1]/{print}' /etc/hosts
Use-Awk to Print Matching Character in File

Im nächsten Beispiel werden Zeichenfolgen abgeglichen, die entweder mit K oder k beginnen, gefolgt von T:

# awk '/[Kk]T/{print}' /etc/hosts 
Use Awk to Print Matched String in File

Spezifizierung von Zeichen in einem Bereich

Verstehen von Zeichen mit awk:

  • [0-9] bedeutet eine einzelne Zahl
  • [a-z] bedeutet übereinstimmen mit einem einzelnen Kleinbuchstaben
  • [A-Z] bedeutet übereinstimmen mit einem einzelnen Großbuchstaben
  • [a-zA-Z] bedeutet übereinstimmen mit einem einzelnen Buchstaben
  • [a-zA-Z 0-9] bedeutet übereinstimmen mit einem einzelnen Buchstaben oder einer Zahl

Lassen Sie uns ein Beispiel unten betrachten:

awk '/[0-9]/{print}' /etc/hosts 
Use Awk To Print Matching Numbers in File

Alle Zeilen aus der Datei /etc/hosts enthalten mindestens eine einzige Zahl [0-9] im obigen Beispiel.

Verwenden Sie Awk mit dem (^) Meta-Zeichen

Es passt alle Zeilen an, die mit dem bereitgestellten Muster beginnen, wie im folgenden Beispiel:

# awk '/^fe/{print}' /etc/hosts
# awk '/^ff/{print}' /etc/hosts
Use Awk to Print All Matching Lines with Pattern

Verwenden Sie Awk mit dem ($) Meta-Zeichen

Es passt alle Zeilen an, die mit dem bereitgestellten Muster enden:

awk '/ab$/{print}' /etc/hosts
awk '/ost$/{print}' /etc/hosts
awk '/rs$/{print}' /etc/hosts
Use Awk to Print Given Pattern String

Verwenden Sie Awk mit dem (\) Escape-Zeichen

Es ermöglicht Ihnen, das darauf folgende Zeichen als wörtlich zu nehmen, das heißt, es einfach so zu betrachten, wie es ist.

In dem folgenden Beispiel gibt der erste Befehl alle Zeilen in der Datei aus, und der zweite Befehl gibt nichts aus, weil ich eine Zeile haben möchte, die $25.00 enthält, 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
Use Awk with Escape Character
Zusammenfassung

Das sind nicht alle Funktionen des awk-Befehlszeilenfilters, die oben genannten Beispiele sind die grundlegenden Operationen von awk. In den nächsten Teilen werden wir uns damit befassen, wie komplexe Funktionen von awk verwendet werden können.

Vielen Dank für das Lesen und für etwaige Ergänzungen oder Klarstellungen posten Sie bitte einen Kommentar im Kommentarbereich.

Source:
https://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/