GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

Wenn wir bestimmte Befehle in Unix/Linux ausführen, um Text aus einer Zeichenfolge oder Datei zu lesen oder zu bearbeiten, versuchen wir meistens, die Ausgabe auf einen bestimmten Abschnitt von Interesse zu filtern. Hier ist die Verwendung von regulären Ausdrücken praktisch.

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 bei regulären Ausdrücken ist, dass sie es Ihnen ermöglichen, die Ausgabe eines Befehls oder einer Datei zu filtern, einen Abschnitt einer Text- oder Konfigurationsdatei zu bearbeiten und so weiter.

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. Metazeichen die zu gewöhnlichen Zeichen erweitert werden, umfassen:
    1. (.) es passt auf jedes einzelne Zeichen außer einem Zeilenumbruch.
    2. (*) es stimmt mit null oder mehr Existenzen des unmittelbar vorangehenden Zeichens überein.
    3. [ Zeichen ] es passt zu einem der in Zeichen angegebenen Zeichen, man kann auch einen Bindestrich (-) verwenden um eine Reihe von Zeichen wie [a-f] zu bezeichnen , [1-5][code> , und so weiter.
    4. ^ es entspricht dem Beginn einer Zeile in einer Datei.
    5. $ entspricht dem Zeilenende in einer Datei.
    6. \ es ist ein Fluchtzeichen.

Um Text zu filtern, muss man ein Textfilter-Tool wie awk verwenden . Sie können an awk denken als eigene Programmiersprache. Aber für den Umfang dieser Anleitung zur Verwendung von awk , werden wir es als einfaches Befehlszeilen-Filtertool behandeln.

Die allgemeine Syntax von awk ist:

# awk 'script' filename

Wobei 'script' ist eine Reihe von Befehlen, die von awk verstanden werden und werden auf Datei, Dateiname.

ausgeführt

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

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

Verwendung des Awk-Filtertools unter Linux

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

Ein einfaches Beispiel für die Verwendung von awk:

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

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

Awk mit Muster verwenden:

Ich das Beispiel unten, ein Muster localhost angegeben wurde, also passt awk die Zeile mit localhost an in /etc/hosts Datei.

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

Awk mit (.) Platzhalter in einem Muster verwenden

Der (.) findet Strings, die loc enthalten , localhost , Lokalnetz im Beispiel unten.

Das heißt * l irgendein_einzelnes_Zeichen c * .

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

Awk mit (*)-Zeichen in einem Muster verwenden

Es wird mit Strings übereinstimmen, die localhost enthalten , Lokalnetz , Linien , fähig , wie im folgenden Beispiel:

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

Sie werden auch feststellen, dass (*) versucht, Ihnen die längste mögliche Übereinstimmung zu liefern, die es erkennen kann.

Schauen wir uns einen Fall an, der dies demonstriert, nehmen Sie den regulären Ausdruck t*t was bedeutet, dass Strings übereinstimmen, die mit dem Buchstaben t beginnen und enden mit t in der Zeile darunter:

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 (*) in /t*t/ Platzhalterzeichen erlaubt awk, die letzte Option zu wählen:

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

Awk mit set [ Zeichen ] verwenden

Nehmen Sie zum Beispiel die Menge [al1] , hier findet awk alle Strings, die das Zeichen a enthalten oder l oder 1 in einer Zeile in der Datei /etc/hosts .

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

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

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

Zeichen in einem Bereich angeben

Zeichen verstehen mit awk:

  1. [0-9][code> 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 Ziffer

Sehen wir uns ein Beispiel unten an:

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

Die gesamte Zeile aus der Datei /etc/hosts mindestens eine einzelne Zahl [0-9] enthalten im obigen Beispiel.

Awk mit (^) Metazeichen verwenden

Es stimmt mit allen Zeilen überein, die mit dem Muster beginnen, das wie im folgenden Beispiel bereitgestellt wird:

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

Awk mit ($) Metazeichen verwenden

Es stimmt mit allen Zeilen überein, 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 (\) Escape-Zeichen

Es erlaubt Ihnen, das folgende Zeichen wörtlich zu nehmen, dh es so zu betrachten, wie es ist.

Im Beispiel unten druckt der erste Befehl alle Zeilen in der Datei aus, der zweite Befehl druckt nichts aus, weil ich eine Zeile mit $25,00 abgleichen möchte , aber es wird kein Escape-Zeichen verwendet.

Der dritte Befehl ist korrekt, da ein Escape-Zeichen verwendet wurde, um $ 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 awk Befehlszeilenfilter-Tool, die obigen Beispiele zeigen die grundlegenden Operationen von awk. In den nächsten Teilen werden wir uns mit der Verwendung komplexer Funktionen von awk befassen. Vielen Dank für das Durchlesen und für Ergänzungen oder Klarstellungen, posten Sie einen Kommentar im Kommentarbereich.


Linux
  1. So verwenden Sie den Grep-Befehl, um Text in Dateien zu finden

  2. So extrahieren Sie .gz- und .tar.gz-Dateien unter Linux

  3. Wie unterscheiden sich reguläre Ausdrücke von Platzhaltern, die zum Filtern von Dateien verwendet werden?

  4. So verwenden Sie Logrotate zum Verwalten von Protokolldateien

  5. So verwenden Sie den Wireshark-Tshark-Befehl für benutzerdefinierte Ports und Textdateien

So finden Sie Dateien, die eine bestimmte Textzeichenfolge in Linux enthalten

So löschen Sie leere Zeilen in Dateien mit Grep, Sed und Awk

So suchen und ersetzen Sie Text, Wort oder Zeichenfolge in einer Datei

So erstellen und verwenden Sie eine Auslagerungsdatei unter Linux

So verstecken Sie Ordner und Dateien in Linux mithilfe einer Textdatei

So verwenden Sie Sed zum Suchen und Ersetzen einer Zeichenfolge in einer Datei