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

Fortgeschrittene reguläre Ausdrücke im Grep-Befehl mit 10 Beispielen – Teil II

In unserem vorherigen Artikel zu regulären Ausdrücken, Teil 1, haben wir grundlegende Reg-Ex mit praktischen Beispielen überprüft.

Aber wir können mit den regulären Ausdrücken noch viel mehr machen. Sie können komplexe Aufgaben oft mit einem einzigen regulären Ausdruck erledigen, anstatt mehrere Codezeilen zu schreiben.

Wenn Sie eine Regex auf einen String anwenden, beginnt die Regex-Engine beim ersten Zeichen des Strings. Es werden alle möglichen Permutationen des regulären Ausdrucks beim ersten Zeichen ausprobiert. Erst wenn alle Möglichkeiten ausprobiert und für fehlgeschlagen befunden wurden, fährt die Regex-Engine mit dem zweiten Zeichen im Text fort.

Die Regex probiert alle möglichen Permutationen der Regex in genau derselben Reihenfolge aus. Das Ergebnis ist, dass die auf Regex ausgerichtete Engine die am weitesten links liegende Übereinstimmung zurückgibt.

Lassen Sie uns in diesem Artikel einige fortgeschrittene reguläre Ausdrücke mit Beispielen überprüfen.

Beispiel 1. ODER-Operation (|)

Das Pipe-Zeichen (|) in grep wird verwendet, um anzugeben, dass einer von zwei ganzen Unterausdrücken an einer Position auftritt. „subexpression1|subexpression2“ entspricht entweder subexpression1 oder subexpression2.

Das folgende Beispiel entfernt drei verschiedene Arten von Kommentarzeilen in einer Datei mit OR in einem grep-Befehl.

Erstellen Sie zunächst eine Beispieldatei mit dem Namen „comments“.

$ cat comments
This file shows the comment character in various programming/scripting languages
### Perl / shell scripting
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
' VB Scripting comment
The line should start with a single quote to comment in VB scripting.
// C programming single line comment.
Double slashes in the beginning of the line for single line comment in C.

Die Datei namens „comments“ enthält Kommentarzeilen für Perl, VB-Skript und C-Programmierung. Nun sucht der folgende grep-Befehl nach der Zeile, die nicht mit # oder einfachen Anführungszeichen (‘) oder doppelten vorderen Schrägstrichen (//) beginnt.

$ grep  -v "^#\|^'\|^\/\/" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Beispiel 2. Zeichenklassenausdruck

Wie wir in unserem vorherigen Regex-Artikel Beispiel 9 gesehen haben, kann eine Liste von Zeichen mit in eckigen Klammern erwähnt werden, um nur einem von mehreren Zeichen zu entsprechen. Der Grep-Befehl unterstützt einige Sonderzeichenklassen, die bestimmte allgemeine Bereiche bezeichnen. Einige davon sind hier aufgeführt. Schlagen Sie in der Manpage von grep nach, um verschiedene Zeichenklassenausdrücke zu kennen.

[:digit:] 	Only the digits 0 to 9
[:alnum:] 	Any alphanumeric character 0 to 9 OR A to Z or a to z.
[:alpha:] 	Any alpha character A to Z or a to z.
[:blank:] 	Space and TAB characters only.

Diese werden immer in eckigen Klammern in der Form [[:Ziffer:]] verwendet. Lassen Sie uns nun alle Prozess-IDs des ntpd-Daemon-Prozesses mit dem entsprechenden Zeichenklassenausdruck auslesen.

$ grep -e "ntpd\[[[:digit:]]\+\]" /var/log/messages.4
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 28 12:33:31 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 12:50:46 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 29 07:55:29 gstuff1 ntpd[2241]: time reset -0.180737 s

Beispiel 3. M bis N Vorkommen ({m,n})

Ein regulärer Ausdruck gefolgt von {m,n} gibt an, dass das vorhergehende Element mindestens m-mal, aber nicht mehr als n-mal gefunden wird. Die Werte von m und n müssen nicht negativ und kleiner als 255 sein.

Das folgende Beispiel gibt die Zeile aus, wenn sie im Bereich von 0 bis 99999 liegt.

$ cat  number
12
12345
123456
19816282

$ grep  "^[0-9]\{1,5\}$" number
12
12345

Die Datei namens „number“ enthält die Liste der Zahlen, der obige grep-Befehl passt nur auf die Zahl, die 1 (Minimum ist 0) bis 5 Ziffern (Maximum 99999) umfasst.

Hinweis :Für grundlegende Beispiele für grep-Befehle lesen Sie 15 Praktische Beispiele für grep-Befehle.

Beispiel 4. Exaktes M Vorkommen ({m})

Ein regulärer Ausdruck gefolgt von {m} stimmt mit genau m Vorkommen des vorangehenden Ausdrucks überein. Der folgende grep-Befehl zeigt nur die 5-stellige Nummer an.

$ grep  "^[0-9]\{5\}$" number
12345

Beispiel 5. M oder mehr Vorkommen ({m,})

Ein regulärer Ausdruck gefolgt von {m,} stimmt mit m oder mehr Vorkommen des vorhergehenden Ausdrucks überein. Der folgende grep-Befehl zeigt die Nummer mit 5 oder mehr Ziffern an.

$ grep "[0-9]\{5,\}" number
12345
123456
19816282

Hinweis Hinweis:Wussten Sie, dass Sie mit dem Befehl bzgrep in bzip2-komprimierten Dateien nach einer Zeichenfolge oder einem Muster (regulärer Ausdruck) suchen können?

Beispiel 6. Wortgrenze (\b)

\b soll für eine Wortgrenze passen. \b findet alle Zeichen am Anfang (\bxx) und/oder Ende (xx\b) eines Wortes, also findet \bthe\b die, aber nicht die, aber \bthe findet sie.

# grep -i "\bthe\b" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Beispiel 7. Rückverweise (\n)

Das Gruppieren der Ausdrücke zur weiteren Verwendung ist in grep durch Rückverweise verfügbar. Zum Beispiel entspricht \([0-9]\)\1 einer zweistelligen Zahl, bei der beide Ziffern dieselbe Zahl sind, wie 11,22,33 usw.,

# grep -e '^\(abc\)\1$'
abc
abcabc
abcabc

Im obigen grep-Befehl akzeptiert es die Eingabe der STDIN. Wenn es die Eingabe „abc“ liest, stimmt es nicht überein. Die Zeile „abcabc“ stimmt mit dem angegebenen Ausdruck überein, sodass es gedruckt wird. Wenn Sie einen erweiterten regulären Ausdruck verwenden möchten, ist es immer vorzuziehen, den Befehl egrep zu verwenden. grep mit der Option -e funktioniert auch wie egrep, aber Sie müssen die Sonderzeichen wie Klammern maskieren.

Hinweis :Sie können auch den Befehl zgrep verwenden, um in einer komprimierten gz-Datei zu suchen.

Beispiel 8. Übereinstimmung mit dem Muster „Objektorientiert“

Bisher haben wir verschiedene Tipps im grep-Befehl gesehen. Lassen Sie uns nun anhand dieser Tipps „objektorientiert“ in verschiedenen Formaten abgleichen.

$ grep "OO\|\([oO]bject\( \|\-\)[oO]riented\)"

Der obige grep-Befehl passt auf „OO“, „objektorientiert“, „objektorientiert“ usw.,

Beispiel 9. Drucken Sie die Zeile „vowel singlecharacter samevowel“

Der folgende grep-Befehl gibt alle Zeilen aus, die einen Vokal (a, e, i, o oder u) enthalten, gefolgt von einem einzelnen Zeichen, gefolgt von demselben Vokal. Daher findet es Eva oder Adam, aber nicht Vera.

$ cat input
evening
adam
vera

$ grep "\([aeiou]\).\1" input
evening
adam

Beispiel 10. Gültige IP-Adresse

Der folgende grep-Befehl vergleicht nur gültige IP-Adressen.

$ cat input
15.12.141.121
255.255.255
255.255.255.255
256.125.124.124

$ egrep  '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' input
15.12.141.121
255.255.255.255

In dem oben angegebenen regulären Ausdruck gibt es verschiedene Bedingungen. Diese bedingten Übereinstimmungen sollten dreimal vorkommen und eine weitere Klasse wird separat erwähnt.

  1. Wenn es mit 25 beginnt, sollte die nächste Zahl 0 bis 5 (250 bis 255) sein
  2. Wenn es mit 2 beginnt, könnte die nächste Zahl 0-4 sein, gefolgt von 0-9 (200 bis 249)
  3. kein Vorkommen von 0 oder 1, 0-9, dann kein Vorkommen einer Zahl zwischen 0-9 (0 bis 199)
  4. Dann Punktzeichen

Den ersten Teil dieses Artikels finden Sie unter Reguläre Ausdrücke im Grep-Befehl mit 10 Beispielen – Teil I


Linux
  1. wc Linux-Befehl mit Beispielen

  2. Nohup-Befehl mit Beispielen

  3. JQ-Befehl in Linux mit Beispielen

  4. Reguläre Ausdrücke im Grep-Befehl mit 10 Beispielen – Teil I

  5. Wie verwenden Sie reguläre Ausdrücke mit dem cp-Befehl in Linux?

15 Linux-PS-Befehl mit Beispielen

Verwenden des GREP-Befehls unter Linux mit Beispielen

Das Grep-Befehls-Tutorial mit Beispielen für Anfänger

Verlaufsbefehl mit Beispielen

Grep-Befehl in Linux (mit Beispielen)

10 praktische Beispiele für Regex mit grep