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

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 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

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

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

Im nächsten Beispiel werden Zeichenfolgen abgeglichen, die entweder mit K
oder k
beginnen, gefolgt von T
:
# awk '/[Kk]T/{print}' /etc/hosts

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

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

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

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

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/