Reguläre Ausdrücke: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
| + | =Was ist Regex= | ||
| + | *Ein regulärer Ausdruck (Regex) ist eine spezialisierte Syntax, die verwendet wird, um Muster in Texten präzise zu definieren. | ||
| + | *Er dient dazu, Zeichenfolgen zu durchsuchen, zu überprüfen oder zu manipulieren. | ||
| + | *Durch seine Kombination aus festen und variablen Elementen ermöglicht Regex das Auffinden von komplexen Mustern wie E-Mail-Adressen, Telefonnummern oder spezifischen Wortkombinationen in großen Textmengen. | ||
| + | |||
| + | |||
| + | |||
| + | = grep = | ||
| + | |||
| + | *'''grep''' Steht für Global Regular Expression Print. | ||
| + | * Suchen von Textmustern in Dateien oder Datenströmen mit Regulären Ausdrücken. | ||
| + | * Arbeitet zeilenbasiert. Gibt standardmäßig ganze Zeilen aus, die das Muster enthalten. | ||
| + | |||
| + | *Mit grep ist es möglich, in Dateien nach regulären Ausdrücken zu suchen. | ||
| + | *Wenn eine Übereinstimmung gefunden wird, wird die komplette Zeile auf die Standardausgabe geschrieben. | ||
| + | *grep kann auch von STDIN lesen. | ||
| + | *Es ist empfehlenswert das Suchmuster in Anführungszeichen zu schreiben. | ||
| + | |||
| + | |||
= Spezialzeichen = | = Spezialzeichen = | ||
| Zeile 82: | Zeile 101: | ||
80[23]?86 8086, 80286 oder 80386 | 80[23]?86 8086, 80286 oder 80386 | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
= Beispiele = | = Beispiele = | ||
Version vom 27. November 2024, 21:55 Uhr
Was ist Regex
- Ein regulärer Ausdruck (Regex) ist eine spezialisierte Syntax, die verwendet wird, um Muster in Texten präzise zu definieren.
- Er dient dazu, Zeichenfolgen zu durchsuchen, zu überprüfen oder zu manipulieren.
- Durch seine Kombination aus festen und variablen Elementen ermöglicht Regex das Auffinden von komplexen Mustern wie E-Mail-Adressen, Telefonnummern oder spezifischen Wortkombinationen in großen Textmengen.
grep
- grep Steht für Global Regular Expression Print.
- Suchen von Textmustern in Dateien oder Datenströmen mit Regulären Ausdrücken.
- Arbeitet zeilenbasiert. Gibt standardmäßig ganze Zeilen aus, die das Muster enthalten.
- Mit grep ist es möglich, in Dateien nach regulären Ausdrücken zu suchen.
- Wenn eine Übereinstimmung gefunden wird, wird die komplette Zeile auf die Standardausgabe geschrieben.
- grep kann auch von STDIN lesen.
- Es ist empfehlenswert das Suchmuster in Anführungszeichen zu schreiben.
Spezialzeichen
| A-z | Ein einzelner Buchstabe passt auf sich selbst |
| . | Ein Punkt passt auf jedes Zeichen außer auf das Zeilenende |
| * | Das dem Operator * vorangehende Muster kann 0 oder öfter vorkommen |
| ^ | (Caret) passt auf den Zeilenanfang |
| $ | Passt auf das Zeilenende |
| \ | Das folgende Sonderzeichen wird entwertet |
| [...] | Passt auf "genau" eins in [...] angebenen Zeichen entwertet RegEx Sonderzeichen außer ^ |
| [^...] | Passt auf "genau" ein Zeichen welches nicht in [...] angebenen ist entwertet RegEx Sonderzeichen außer ^ |
| \< | Passt auf den Wortanfang |
| \> | Passt auf das Wortende |
| \+ | Das dem Operator \+ vorangehende Muster kann 1 oder öfter vorkommen |
| & | Setzt das gefunden Suchmuster ein |
| \(...\) | Speichert den Text auf den das Suchmuster passt zur späteren Verwendung |
| \n | Setzt das vorangehende, mit \(...\) Gefundene wieder ein |
| (...) | Gruppiert Auswahlmöglichkeiten |
| \| | Trennt Auswahlmöglichkeiten |
| \b | Passt auf den Anfang oder das Ende eines Wortes |
| \B | Symbolisiert den Raum innerhalb eines Wortes |
| \w | Passt auf alle alphanumerischen Zeichen [A-Za-z0-9] |
| \W | Passt auf alle nichtalphanumerischen Zeichen [^A-Za-z0-9] |
| \d | Passt auf alle numerischen Zeichen = [0-9] Nur in Perl RegEx! |
| \D | Passt auf alle nichtnumerischen Zeichen = [0-9] Nur in Perl RegEx! |
Die Rangfolge der Operatoren(von der höchsten zur niedrigsten)
- (, ), ?, *, + | .
Die anderen Operatoren sind mit den anderen Buchstaben gleichrangig.
- Beispiele
Suchmuster Passt auf ^Tuxer Tuxer am Zeilenanfang [tT]uxer Tuxer oder tuxer 80[23]?86 8086, 80286 oder 80386
Beispiele
- vim text
quatsch quatsch quatsch wichtig quatsch
- grep "wichtig" text
wichtig
- grep "xinux" /etc/passwd
xinux:x:1000:1000:xinux,,,:/home/xinux:/bin/bash
- grep "1[0-9][0-9][0-9]" /etc/passwd
xinux:x:1000:1000:xinux,,,:/home/xinux:/bin/bash
- grep "x\w\+x" /etc/passwd
xinux:x:1000:1000:xinux,,,:/home/xinux:/bin/bash
- grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
- ls -l /etc | grep shadow
-rw-r----- 1 root shadow 1003 Mär 19 20:18 gshadow -rw-r----- 1 root shadow 995 Jan 16 19:30 gshadow- -rw-r----- 1 root shadow 1615 Mär 19 20:18 shadow -rw-r----- 1 root shadow 1615 Mär 19 20:18 shadow-
- Echte E-Mail-Adresse RegEx
- vim mail
Max.Mustermann@Beispiel.de Hallo@Welt.de Irgendwas Anderes Böse Adresse@+++.de DieHier@GehtWieder.de DieHier@@GehtWiederNicht.de Auch01927Zahlen@SindErlaubt.com Lokaler_Teil_Erlaubt_Unterstriche@Tests.com Tests@Globaler_Teile_Aber_nicht.com
- grep -P "[\w.%+-]+@[\w.-][^_]+\.[a-z]{2,}" mail
Max.Mustermann@Beispiel.de Hallo@Welt.de DieHier@GehtWieder.de Auch01927Zahlen@SindErlaubt.com Lokaler_Teil_Erlaubt_Unterstriche@Tests.com
- [\w.%+-]+
- Dieser Teil entspricht einem oder mehreren alphanumerischen Zeichen (\w), Punkten (.), Prozentzeichen (%), Pluszeichen (+) oder Minuszeichen (-).
- Dies ist der Teil vor dem "@"-Symbol in der E-Mail-Adresse, also der Benutzername.
- @
- Dies ist einfach das "@"-Symbol, das in einer gültigen E-Mail-Adresse vorhanden sein muss.
- [\w.-]
- Dieser Teil entspricht einem alphanumerischen Zeichen (\w), einem Punkt (.) oder einem Minuszeichen (-).
- Dies ist der erste Teil der Domain nach dem "@"-Symbol.
- [^_]+
- Hier steht [^_], was bedeutet, dass ein Unterstrich (_) in diesem Teil nicht erlaubt ist.
- Dieser Teil entspricht einem oder mehreren Zeichen, die nicht der Unterstrich sind.
- Dies ist der zweite Teil der Domain.
- \.
- Dies entspricht einem Punkt (.), der das Trennzeichen zwischen dem Domänennamen und der Top-Level-Domain (TLD) markiert.
- [a-z]{2,}
- Dies entspricht zwei oder mehr kleinen Buchstaben (von a bis z), was die TLD repräsentiert.
Mehr Optionen für grep
-c meldet nur die Gesamtzahl der Fundstellen -v zeigt nur Zeilen, die »Ausdruck« nicht enthalten -i ignoriert Groß- und Kleinschreibung -l meldet nur Dateinamen mit Fundstellen -n listet Zeilennummern zu jeder Fundstelle -f Dateiname »Dateiname« enthält die Such-Ausdrücke -E ist ein erweiterter regulärer Ausdruck (egrep) -F (Muster, Ausdruck) ist ein Muster (String) (fgrep) -b listet auch die Position der Fundstellen -A Anzahl Anzahl von Zeilen werden nach der Fundstelle ausgegeben -B Anzahl Anzahl von Zeilen werden vor der Fundstelle ausgegeben -r Durchsucht Verzeichnisse rekursiv
Übung
Textvorlage
Kopieren sie folgenden Text in eine Datei text.txt
Alice hat 3 Katzen. Bob mag Hunde, besonders Labrador Retriever. Charlie sagte: "Ich habe keine Haustiere." Alice besucht oft den Park mit ihren Katzen. 42 ist die Antwort auf alles. Bob kaufte gestern 13 Bananen und 3 Äpfel. Charlie fragte: "Ist 7 eine Glückszahl?"
Aufgaben
- Finde alle Zeilen, die das Wort Alice enthalten.
- Finde Zeilen, die mit einem Großbuchstaben beginnen.
- Suche nach Zeilen, die eine Zahl enthalten.
- Finde Zeilen, in denen das Wort Charlie am Anfang steht.
- Suche nach Zeilen, die mit einem Punkt . enden.
- Finde Zeilen, in denen die Zahl 3 als eigenständige Zahl vorkommt (z. B. nicht in 42).
- Suche nach Zeilen, in denen entweder Katzen oder Hunde vorkommen.
- Finde Zeilen mit genau einem Anführungszeichen (").
- Suche nach Zeilen, in denen eine Zahl mit mindestens zwei Ziffern vorkommt.
- Finde Zeilen, die den Buchstaben b (Groß- oder Kleinschreibung) enthalten.