Reguläre Ausdrücke: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(43 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Spezialzeichen =
+
=Was sind Reguläre Ausdrücke=
 
+
*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.
 +
==So sehen sie aus==
 
{| Border=1 Cellpadding=2
 
{| Border=1 Cellpadding=2
 
|A-z
 
|A-z
Zeile 21: Zeile 24:
 
|-
 
|-
 
|[...]
 
|[...]
|Passt auf "genau" eins in [...] angebenen Zeichen
+
|Passt auf "genau" eins in [...] angebenen Zeichen '''entwertet RegEx Sonderzeichen außer ^'''
 
|-
 
|-
 
|[^...]
 
|[^...]
|Passt auf "genau" ein Zeichen welches nicht in [...] angebenen ist
+
|Passt auf "genau" ein Zeichen welches nicht in [...] angebenen ist '''entwertet RegEx Sonderzeichen außer ^'''
 
|-
 
|-
 
|\<
 
|\<
Zeile 47: Zeile 50:
 
|Gruppiert Auswahlmöglichkeiten
 
|Gruppiert Auswahlmöglichkeiten
 
|-
 
|-
|<nowiki>|</nowiki>
+
|<nowiki>\|</nowiki>
 
|Trennt Auswahlmöglichkeiten
 
|Trennt Auswahlmöglichkeiten
 
|-
 
|-
Zeile 62: Zeile 65:
 
|Passt auf alle nichtalphanumerischen Zeichen [^A-Za-z0-9]
 
|Passt auf alle nichtalphanumerischen Zeichen [^A-Za-z0-9]
 
|-
 
|-
|\d '''Nur in Perl RegEx!
+
|\d  
|Passt auf alle numerischen Zeichen = [0-9]
+
|Passt auf alle numerischen Zeichen = [0-9] '''Nur in Perl RegEx!
 
|-
 
|-
|\D '''Nur in Perl RegEx!'''
+
|\D  
|Passt auf alle nichtnumerischen Zeichen = [0-9]
+
|Passt auf alle nichtnumerischen Zeichen = [0-9] '''Nur in Perl RegEx!'''
 
|}
 
|}
  
Zeile 82: Zeile 85:
 
  80[23]?86                8086, 80286 oder 80386
 
  80[23]?86                8086, 80286 oder 80386
  
= grep =
+
=Wo kann ich Reguläre Ausdrücke benutzen=
 +
Viele Programme und Tools unterstützen reguläre Ausdrücke (Regex) für die Textsuche, -manipulation und -verarbeitung. Hier sind einige gängige Programme und Anwendungen, die Regex unterstützen:
 +
 
 +
==Texteditoren==
 +
*Vim / Neovim: Leistungsstarker Texteditor mit umfassender Regex-Unterstützung.
 +
*Emacs: Bietet Regex-Optionen zum Suchen und Ersetzen.
 +
*Sublime Text: Ermöglicht die Verwendung von Regex für die Textsuche.
 +
*Visual Studio Code: Unterstützt Regex in der Suche und beim Ersetzen.
 +
*Notepad++: Bietet Regex-Optionen für Suchen und Ersetzen.
 +
*Atom: Ermöglicht Regex in der integrierten Suche.
 +
==Betriebssystem-Tools==
 +
*grep (Linux/Unix): Ein Kommandozeilen-Tool, das Regex für die Textsuche nutzt.
 +
*sed (Stream Editor, Linux/Unix): Unterstützt Regex für Textmanipulation in Streams.
 +
*awk (Linux/Unix): Bietet Regex-Unterstützung für Textverarbeitung und Datenextraktion.
 +
*find (Linux/Unix): Kann Regex für Dateisuchmuster verwenden.
 +
==Programmiersprachen==
 +
*Python: Das re-Modul bietet eine umfassende Regex-Implementierung.
 +
*JavaScript: Regex wird direkt in der Sprache unterstützt (z.B. RegExp-Objekt).
 +
*Java: Bietet mit der java.util.regex-Bibliothek eine leistungsstarke Regex-Implementierung.
 +
*Ruby: In Ruby ist Regex in die Sprache integriert und wird über die Regexp-Klasse verwendet.
 +
*Perl: Bekannt für seine starke Unterstützung von Regex, die direkt in der Sprache integriert ist.
 +
*PHP: Bietet mehrere Funktionen zur Regex-Verarbeitung (preg_*).
 +
==Datenbanken==
 +
*MySQL: Unterstützt Regex mit der REGEXP-Funktion in SQL-Abfragen.
 +
*PostgreSQL: Bietet Regex-Funktionen wie ~ für die Mustererkennung in Abfragen.
 +
*MongoDB: Unterstützt Regex in Abfragen über die $regex-Operatoren.
 +
==Webbrowser==
 +
*Chrome DevTools: Unterstützt Regex in der JavaScript-Konsole und für die Netzwerksuche.
 +
*Firefox Developer Tools: Unterstützt Regex für die Suche in den Entwicklertools.
 +
==Software zur Datenanalyse==
 +
*Microsoft Excel: Mit bestimmten Add-Ons oder in VBA kann Regex verwendet werden.
 +
*R: Das stringr-Paket unterstützt Regex zur Textmanipulation und -analyse.
 +
*Excel und Google Sheets: Mit bestimmten Funktionen oder Makros kann Regex zur Textsuche und -manipulation verwendet werden.
 +
==Suchmaschinen und Online-Tools==
 +
*Google Search: Unterstützt einfache Regex für die erweiterte Suchsyntax (meist mit speziellen Platzhaltern wie *).
 +
*grep Online: Online-Tools zum Testen von Regex-Ausdrücken.
 +
*Regex101: Eine interaktive Webseite zum Testen und Debuggen von Regex-Ausdrücken.
 +
 
 +
 
 +
=Mit grep reguläre Ausdrücke lernen=
 +
 
 +
*'''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.
 +
 
 +
==Grundsyntax==
 +
<pre>grep [OPTIONEN] "MUSTER" DATEI</pre>
 +
*MUSTER: Das Suchmuster (normaler Text oder regulärer Ausdruck).
 +
*DATEI: Die Datei, in der gesucht wird.
 +
==Highlighting aktivieren==
 +
Als ersten Schritt kann man, wenn man möchte, das Highlighting dauerhaft aktivieren, um das Suchmuster in den ausgegebenen Zeilen farbig darzustellen und so die Suchergebnisse visuell hervorzuheben.
 +
 
 +
1. Öffne die Datei .bashrc in deinem Home-Verzeichnis mit einem Texteditor.
 +
<pre>nano ~/.bashrc</pre>
 +
2. Füge am Ende der Datei folgende Zeile hinzu:
 +
<pre>alias grep='grep --color=auto'</pre>
 +
3. Änderungen anwenden: Um die Änderungen sofort wirksam zu machen, lade die .bashrc-Datei neu:
 +
<pre>source ~/.bashrc</pre>
 +
 
 +
Auch als Einzeiler möglich mit:
 +
<pre>echo "alias grep='grep --color=auto'" >> ~/.bashrc ; source ~/.bashrc</pre>
 +
 
 +
==Grundlegende Beispiele==
 +
===Text suchen===
 +
<pre>grep "hello" file.txt</pre>
 +
*Sucht nach Zeilen, die das Wort hello enthalten.
 +
 
 +
===Groß- und Kleinschreibung ignorieren===
 +
<pre>grep -i "hello" file.txt</pre>
 +
*Findet hello, Hello, oder HELLO.
 +
 
 +
===Zeilenummern anzeigen===
 +
<pre>grep -n "hello" file.txt</pre>
 +
*Gibt die Zeilennummern der Treffer aus.
 +
 
 +
===Nur Übereinstimmungen anzeigen===
 +
<pre>grep -o "hello" file.txt</pre>
 +
*Zeigt nur die Treffer selbst, nicht die ganze Zeile.
 +
 
 +
==Erweiterte Optionen==
 +
===Rekursiv durchsuchen===
 +
<pre>grep -r "hello" /path/to/directory</pre>
 +
*Durchsucht Dateien in einem Verzeichnis rekursiv.
 +
 
 +
===Nur Dateinamen anzeigen===
 +
<pre>grep -l "hello" *.txt</pre>
 +
*Gibt nur die Namen der Dateien aus, die das Muster enthalten.
 +
 
 +
===Invertierte Übereinstimmung===
 +
<pre>grep -v "error" file.txt</pre>
 +
*Zeigt alle Zeilen an, die nicht error enthalten.
 +
 
 +
===Anzahl der Treffer anzeigen===
 +
<pre>grep -c "hello" file.txt</pre>
 +
*Gibt die Anzahl der Zeilen mit Übereinstimmungen zurück.
 +
 
 +
==Mit regulären Ausdrücken==
 +
===Beliebiges Zeichen suchen===
 +
<pre>grep "h.llo" file.txt</pre>
 +
*Findet hello, hallo, hxllo, usw.
 +
 
 +
===Zeilenanfang===
 +
<pre>grep "^start" file.txt</pre>
 +
*Findet Zeilen, die mit start beginnen.
  
*Mit grep ist es möglich, in Dateien nach regulären Ausdrücken zu suchen.
+
===Zeilenende===
*Wenn eine Übereinstimmung gefunden wird, wird die komplette Zeile auf die Standardausgabe geschrieben.
+
<pre>grep "end$" file.txt</pre>
*grep kann auch von STDIN lesen.
+
*Findet Zeilen, die mit end enden.
*Es ist empfehlenswert das Suchmuster in Anführungszeichen zu schreiben.
 
*Mit pgrep kann man auch laufende filtern
 
  
;Beispiel:
+
===Zahlen finden===
 +
<pre>grep "[0-9]" file.txt</pre>
 +
*Findet Zeilen, die mindestens eine Zahl enthalten.
 +
 
 +
===Wortgrenzen===
 +
<pre>grep "\bword\b" file.txt</pre>
 +
*Findet das Wort word, aber nicht sword oder wording.
 +
 
 +
= Beispiele =
 +
 
 +
* '''vim text'''
  
root@zero:~# cat text
 
 
  quatsch
 
  quatsch
 
  quatsch
 
  quatsch
Zeile 98: Zeile 211:
 
  wichtig
 
  wichtig
 
  quatsch
 
  quatsch
root@zero:~# grep wichtig text
+
 
 +
* '''grep "wichtig" text'''
 +
 
 
  wichtig
 
  wichtig
root@zero:~#
 
 
-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
 
;Valid E-Mail regex
 
  
  root@zero:~# cat mail
+
* '''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
 
  Max.Mustermann@Beispiel.de
 
  Hallo@Welt.de
 
  Hallo@Welt.de
Zeile 127: Zeile 252:
 
  Tests@Globaler_Teile_Aber_nicht.com
 
  Tests@Globaler_Teile_Aber_nicht.com
 
   
 
   
root@zero:~# grep -P "[\w.%+-]+@[\w.-][^_]+\.[a-z]{2,}" mail
+
* '''grep -P "[\w.%+-]+@[\w.-][^_]+\.[a-z]{2,}" mail'''
 
  Max.Mustermann@Beispiel.de
 
  Max.Mustermann@Beispiel.de
 
  Hallo@Welt.de
 
  Hallo@Welt.de
Zeile 133: Zeile 258:
 
  Auch01927Zahlen@SindErlaubt.com
 
  Auch01927Zahlen@SindErlaubt.com
 
  Lokaler_Teil_Erlaubt_Unterstriche@Tests.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''' mit:
 +
<pre>
 +
cat << EOF > 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?"
 +
EOF
 +
</pre>
 +
 +
==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 13).
 +
#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.
 +
 +
==Lösungen==
 +
*[[Regex Übungen Lösungen]]
  
 
= Links =
 
= Links =

Aktuelle Version vom 28. November 2024, 07:58 Uhr

Was sind Reguläre Ausdrücke

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

So sehen sie aus

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

Wo kann ich Reguläre Ausdrücke benutzen

Viele Programme und Tools unterstützen reguläre Ausdrücke (Regex) für die Textsuche, -manipulation und -verarbeitung. Hier sind einige gängige Programme und Anwendungen, die Regex unterstützen:

Texteditoren

  • Vim / Neovim: Leistungsstarker Texteditor mit umfassender Regex-Unterstützung.
  • Emacs: Bietet Regex-Optionen zum Suchen und Ersetzen.
  • Sublime Text: Ermöglicht die Verwendung von Regex für die Textsuche.
  • Visual Studio Code: Unterstützt Regex in der Suche und beim Ersetzen.
  • Notepad++: Bietet Regex-Optionen für Suchen und Ersetzen.
  • Atom: Ermöglicht Regex in der integrierten Suche.

Betriebssystem-Tools

  • grep (Linux/Unix): Ein Kommandozeilen-Tool, das Regex für die Textsuche nutzt.
  • sed (Stream Editor, Linux/Unix): Unterstützt Regex für Textmanipulation in Streams.
  • awk (Linux/Unix): Bietet Regex-Unterstützung für Textverarbeitung und Datenextraktion.
  • find (Linux/Unix): Kann Regex für Dateisuchmuster verwenden.

Programmiersprachen

  • Python: Das re-Modul bietet eine umfassende Regex-Implementierung.
  • JavaScript: Regex wird direkt in der Sprache unterstützt (z.B. RegExp-Objekt).
  • Java: Bietet mit der java.util.regex-Bibliothek eine leistungsstarke Regex-Implementierung.
  • Ruby: In Ruby ist Regex in die Sprache integriert und wird über die Regexp-Klasse verwendet.
  • Perl: Bekannt für seine starke Unterstützung von Regex, die direkt in der Sprache integriert ist.
  • PHP: Bietet mehrere Funktionen zur Regex-Verarbeitung (preg_*).

Datenbanken

  • MySQL: Unterstützt Regex mit der REGEXP-Funktion in SQL-Abfragen.
  • PostgreSQL: Bietet Regex-Funktionen wie ~ für die Mustererkennung in Abfragen.
  • MongoDB: Unterstützt Regex in Abfragen über die $regex-Operatoren.

Webbrowser

  • Chrome DevTools: Unterstützt Regex in der JavaScript-Konsole und für die Netzwerksuche.
  • Firefox Developer Tools: Unterstützt Regex für die Suche in den Entwicklertools.

Software zur Datenanalyse

  • Microsoft Excel: Mit bestimmten Add-Ons oder in VBA kann Regex verwendet werden.
  • R: Das stringr-Paket unterstützt Regex zur Textmanipulation und -analyse.
  • Excel und Google Sheets: Mit bestimmten Funktionen oder Makros kann Regex zur Textsuche und -manipulation verwendet werden.

Suchmaschinen und Online-Tools

  • Google Search: Unterstützt einfache Regex für die erweiterte Suchsyntax (meist mit speziellen Platzhaltern wie *).
  • grep Online: Online-Tools zum Testen von Regex-Ausdrücken.
  • Regex101: Eine interaktive Webseite zum Testen und Debuggen von Regex-Ausdrücken.


Mit grep reguläre Ausdrücke lernen

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

Grundsyntax

grep [OPTIONEN] "MUSTER" DATEI
  • MUSTER: Das Suchmuster (normaler Text oder regulärer Ausdruck).
  • DATEI: Die Datei, in der gesucht wird.

Highlighting aktivieren

Als ersten Schritt kann man, wenn man möchte, das Highlighting dauerhaft aktivieren, um das Suchmuster in den ausgegebenen Zeilen farbig darzustellen und so die Suchergebnisse visuell hervorzuheben.

1. Öffne die Datei .bashrc in deinem Home-Verzeichnis mit einem Texteditor.

nano ~/.bashrc

2. Füge am Ende der Datei folgende Zeile hinzu:

alias grep='grep --color=auto'

3. Änderungen anwenden: Um die Änderungen sofort wirksam zu machen, lade die .bashrc-Datei neu:

source ~/.bashrc

Auch als Einzeiler möglich mit:

echo "alias grep='grep --color=auto'" >> ~/.bashrc ; source ~/.bashrc

Grundlegende Beispiele

Text suchen

grep "hello" file.txt
  • Sucht nach Zeilen, die das Wort hello enthalten.

Groß- und Kleinschreibung ignorieren

grep -i "hello" file.txt
  • Findet hello, Hello, oder HELLO.

Zeilenummern anzeigen

grep -n "hello" file.txt
  • Gibt die Zeilennummern der Treffer aus.

Nur Übereinstimmungen anzeigen

grep -o "hello" file.txt
  • Zeigt nur die Treffer selbst, nicht die ganze Zeile.

Erweiterte Optionen

Rekursiv durchsuchen

grep -r "hello" /path/to/directory
  • Durchsucht Dateien in einem Verzeichnis rekursiv.

Nur Dateinamen anzeigen

grep -l "hello" *.txt
  • Gibt nur die Namen der Dateien aus, die das Muster enthalten.

Invertierte Übereinstimmung

grep -v "error" file.txt
  • Zeigt alle Zeilen an, die nicht error enthalten.

Anzahl der Treffer anzeigen

grep -c "hello" file.txt
  • Gibt die Anzahl der Zeilen mit Übereinstimmungen zurück.

Mit regulären Ausdrücken

Beliebiges Zeichen suchen

grep "h.llo" file.txt
  • Findet hello, hallo, hxllo, usw.

Zeilenanfang

grep "^start" file.txt
  • Findet Zeilen, die mit start beginnen.

Zeilenende

grep "end$" file.txt
  • Findet Zeilen, die mit end enden.

Zahlen finden

grep "[0-9]" file.txt
  • Findet Zeilen, die mindestens eine Zahl enthalten.

Wortgrenzen

grep "\bword\b" file.txt
  • Findet das Wort word, aber nicht sword oder wording.

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

cat << EOF > 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?"
EOF

Aufgaben

  1. Finde alle Zeilen, die das Wort Alice enthalten.
  2. Finde Zeilen, die mit einem Großbuchstaben beginnen.
  3. Suche nach Zeilen, die eine Zahl enthalten.
  4. Finde Zeilen, in denen das Wort Charlie am Anfang steht.
  5. Suche nach Zeilen, die mit einem Punkt . enden.
  6. Finde Zeilen, in denen die Zahl 3 als eigenständige Zahl vorkommt (z. B. nicht in 13).
  7. Suche nach Zeilen, in denen entweder Katzen oder Hunde vorkommen.
  8. Finde Zeilen mit genau einem Anführungszeichen (").
  9. Suche nach Zeilen, in denen eine Zahl mit mindestens zwei Ziffern vorkommt.
  10. Finde Zeilen, die den Buchstaben b (Groß- oder Kleinschreibung) enthalten.

Lösungen

Links