Verwendung von regulären Ausdrücken mit grep
Eines der leistungsfähigsten Merkmale von grep
ist seine Fähigkeit, reguläre Ausdrücke (regex) für die Mustererkennung zu verwenden. Reguläre Ausdrücke ermöglichen es Ihnen, nach komplexen Mustern zu suchen, anstatt nur nach exaktem Text.
Grundlegende Zeichen für reguläre Ausdrücke
Hier sind einige häufige Sonderzeichen für reguläre Ausdrücke:
.
(Punkt): Passt auf ein beliebiges einzelnes Zeichen
^
: Passt auf den Anfang einer Zeile
$
: Passt auf das Ende einer Zeile
*
: Passt auf null oder mehrere Vorkommen des vorhergehenden Zeichens
[]
: Passt auf eines der Zeichen innerhalb der eckigen Klammern
[^]
: Passt auf jedes Zeichen, das NICHT in den eckigen Klammern steht
Erstellen wir eine neue Datei mit abwechslungsreicherem Inhalt, um damit zu üben:
cat > ~/project/grep_lab/regex_practice.txt << EOF
apple
banana
orange
grape
Apple
pineapple
watermelon
123-456-7890
test@example.com
https://www.example.com
The quick brown fox jumps over the lazy dog.
EOF
Übereinstimmung mit jedem Zeichen mittels Punkt (.)
Der Punkt (.
) in einem regulären Ausdruck passt auf ein beliebiges einzelnes Zeichen:
grep "a..le" ~/project/grep_lab/regex_practice.txt
Dies passt auf Wörter wie "apple", bei denen zwischen 'a' und 'le' beliebige zwei Zeichen stehen können:
apple
pineapple
Übereinstimmung mit dem Zeilenanfang (^)
Das Caret (^
) passt auf Muster am Anfang einer Zeile:
grep "^a" ~/project/grep_lab/regex_practice.txt
Dies passt auf Zeilen, die mit dem Buchstaben 'a' beginnen:
apple
Übereinstimmung mit dem Zeilenende ($)
Das Dollarzeichen ($
) passt auf Muster am Ende einer Zeile:
grep "e$" ~/project/grep_lab/regex_practice.txt
Dies passt auf Zeilen, die mit dem Buchstaben 'e' enden:
apple
grape
pineapple
orange
Zeichenklassen mit eckigen Klammern []
Eckige Klammern ermöglichen es Ihnen, eine Gruppe von Zeichen anzugeben, die übereinstimmen sollen:
grep "[0-9]" ~/project/grep_lab/regex_practice.txt
Dies passt auf jede Zeile, die eine Ziffer enthält:
123-456-7890
Sie können Zeichenklassen kombinieren:
grep "[a-zA-Z0-9]" ~/project/grep_lab/regex_practice.txt
Dies passt auf jede Zeile, die alphanumerische Zeichen enthält (was in unserer Datei alle Zeilen sein wird).
Negierte Zeichenklassen [^]
Um Zeichen zu matchen, die nicht in einer Gruppe enthalten sind, verwenden Sie [^]
:
grep "^[^aeiou]" ~/project/grep_lab/regex_practice.txt
Dies passt auf Zeilen, die mit einem Zeichen beginnen, das kein Vokal ist:
banana
grape
pineapple
watermelon
123-456-7890
test@example.com
https://www.example.com
The quick brown fox jumps over the lazy dog.
Erweiterte reguläre Ausdrücke mit -E
Für fortgeschrittenere Funktionen von regulären Ausdrücken verwenden Sie die Option -E
(oder egrep
):
grep -E "(apple|grape)" ~/project/grep_lab/regex_practice.txt
Dies passt auf Zeilen, die entweder "apple" oder "grape" enthalten:
apple
grape
pineapple
Experimentieren Sie mit verschiedenen regulären Ausdrücken, um sich besser mit der Mustererkennung vertraut zu machen. Reguläre Ausdrücke sind eine Fähigkeit, die sich durch Übung entwickelt!