LPIC101/103.7 Regulären Ausdrücke
topic - Kurzbeschreibung
Beschreibung
- Gewichtung
- 3
Begriffs- und Zeichenklärung
- Was sind reguläre Ausdrücke?
- Reguläre Ausdrücke erleichtern das durchsuchen von Texten
- Sie beschreiben anhand von Wildcards, Suchwörtern und Positionsangaben und ermöglichen so eine differenziertere Suche
- Wildcards werden auch Jokerzeichen genannt und sind Platzhalter für ein oder mehrere Zeichen
- Reguläre Ausdrücke werden in englisch Regular Expressions genannt
- Reguläre Ausdrücke werden meist mit RegEx oder RegExp abgekürzt
- Wo werden reguläre Ausdrücke verwendet?
- In allen Programmiersprachen
- Shell
- grep
- find
- vi(m)
- sed
- awk
- GUI
- Kate Editor
- In vielen weiteren Programmen (z. B. libreOffice)
Metazeichen
- Anker
Anker beschreiben die Position einer Suchanfrage
- Es können auch Zeichen und Zeichensätze angegeben werden, nach denen gesucht werden soll
Anker | Beschreibung |
---|---|
^ |
Textanker für Zeilenanfang |
$ |
Textanker für Zeilenende |
\< |
markiert einen Wortanfang |
\> |
markiert ein Wortende |
\ |
schützt ein Zeichen vor der Interpretation (z. B. \$ sucht nach Dollarzeichen und nimmt diesen seine Spezialbedeutung) |
[] |
sucht nach einem Zeichen oder einer Zeichenfolge innerhalb des eckig geklammerten Bereichs (z. B. [a-g] ) |
[^Zeichen] |
Schließt das Zeichen nach dem Circonflex aus der Suche aus |
Wildcards (Joker/Quantoren)
Wildcards beschreiben vorgehende und nachfolgende Zeichen.
*
bezeichnet keine oder beliebig viele Wiederholungen des vorangegangenen Zeichens?
bezeichnet keine oder eine Wiederholung des vorangegangenen Zeichens+
bezeichnet, dass das voranstehende Zeichen mindestens einmal vorkommt.
wird als Platzhalter für ein beliebiges Zeichen verwendet
Anwendung
GREP
- Verwendung von grep mit regulären Ausdrücken
Der Filter grep bedeutet "Global search for Regular Expressions and Print out" (Sinngemäß: Globale Suche durch Reguläre Ausdrücke mit Ausgabe).
- Hinweise
-
-v
ist bei grep nicht verbose (Gesprächigkeit), sondern invertiert die Ausgabe (z. B. grep -v "Testwort" zeigt alle Zeilen ohne Testwort)-E
aktiviert erweiterte reguläre Ausdrücke (entspricht dem Befehl egrep)-i
ignoriert Groß- & Kleinschreibung
Beispiele
# grep [Ww]ill[iy] Adressliste
– sucht in der Datei Adressliste nach Willi,willi,Willy und willy. (grep -i Will[iy] liefert das gleiche Ergebnis, ignoriert jedoch auch die Groß- & Kleinschreibung von den anderen Buchstaben)
# grep W.lly Adressliste
– der Punkt ersetzt ein beliebiges Zeichen, somit würden Willy, Wally usw. gefunden werden, sofern diese existieren.
# grep -v ^[#] /etc/config.conf
oder Alternativ # grep ^[^#] /etc/config.conf
– findet alle Zeilenanfänge, welche nicht mit einer Raute beginnen
# grep ^[^#] /etc/config.conf | grep -v ^$
– Sucht alle Zeilenanfänge ohne Raute und mit Zeichen am Anfang (siebt Leerzeilen aus, Leerzeile ist Zeilenanfang ^ gefolgt von Zeilenende $)
# grep 'Wort[1-9]*\>' Suchdatei
– Sucht alle Wörter, welche mit "Wort" anfangen und anschließend beliebig viele Zahlen bis zum Wortende beinhalten.
# grep 'Wort[1-9]\?\>' Suchdatei
– Sucht alle Wörter, welche mit "Wort" anfangen und anschließend eine beliebige einstellige Zahl bis zum Wortende beinhalten.
# grep -w '1\{3,5\}' Suchdatei
– Mit dem folgenden Kommando werden alle Zeilen einer Datei angezeigt, die drei, vier oder fünf aufeinander folgende Einsen enthalten.
Schutz von Metazeichen
Einige Metazeichen müssen durch einen Backslash geschützt werden, damit grep diese nicht als Suchmusterbestandteil versteht.
Diese Zeichen sind:
?
+
{
}
|
(
)
egrep und fgrep
Ursprünglich eigenständige Filter, werden diese beiden Varianten heute kaum noch verwendet. Sie sind in grep mit dem Optionen -E und -F enthalten. egrep hat erweiterte Funktionen (benötigt daher etwas länger zum Suchen), fgrep verzichtet auf Metazeichen und spart somit Zeit und Rechenleistung.
Konfiguration
Dateien
Anhang
Test
Wonach sucht RegEx ^[^#]
Sie geben im Kate Editor unter Suchen ohne RegExp "a*" ein. Was erhalten Sie als Antwort?
Sie geben in der Kate-Suche mit RegEx a* ein, was erhalten Sie als Antwort?
Sie geben in der Shell den Befehl ls a* ein, was erhalten Sie als Antwort?
Sie geben in der Shell den Befehl ls a??? ein, was erhalten Sie als Antwort?
Wie können Sie sich alle Einträge vom 10ten Dezember im Systemlog ansehen?
Wonach sucht das folgende RegEx Kommando : # grep –w '[0-9]\{3\}' Suchdatei ?
Wonach sucht das folgende RegExp Kommando : # grep '[A-Z]\+' Suchdatei ?
archangel:/textfiles # sed 's/ae/ä/g' DeutscherText.txt
? Siehe auch
Dokumentation
Man-Pages
Info-Pages
Links
Projekt
Weblinks