Muster mit Basis-Regulären Ausdrücken abgleichen
In diesem Schritt erfahren Sie, wie Sie Basis-Reguläre Ausdrücke (BRE) mit grep
verwenden, um flexiblere Suchmuster zu erstellen. In BRE haben bestimmte Zeichen, sogenannte Metazeichen, spezielle Bedeutungen, die über ihren wörtlichen Wert hinausgehen. Dies ermöglicht es Ihnen, Muster und nicht nur feste Zeichenketten abzugleichen.
Wir werden zwei grundlegende Metazeichen untersuchen: *
(Sternchen) und .
(Punkt).
Betrachten wir zunächst das Sternchen (*
). Dieses Metazeichen gleicht das unmittelbar davor stehende Zeichen null- oder mehrmals ab. Um dies in Aktion zu sehen, führen Sie den folgenden Befehl aus. Wir werden das Muster in einfache Anführungszeichen ('roo*'
) einschließen, um sicherzustellen, dass die Shell es als wörtliches Muster behandelt und nicht versucht, *
als Dateiwildcard zu erweitern.
grep 'roo*' /etc/passwd
Die Ausgabe wird wahrscheinlich mehrere Zeilen anzeigen:
root:x:0:0:root:/root:/bin/bash
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
rtkit:x:108:113:RealtimeKit,,,:/proc:/usr/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
Analysieren wir dieses Ergebnis. Das Muster 'roo*'
sucht nach Zeilen, die ro
gefolgt von null oder mehr o
's enthalten.
- Die Zeile
root
passt, da sie roo
enthält (ro
gefolgt von einem o
).
- Die Zeile
proxy
passt, da sie ro
enthält (ro
gefolgt von null o
's) in "proxy".
- Die Zeile
systemd-timesync
passt, da sie ro
in "Synchronization" enthält.
- Die Zeile
rtkit
passt, da sie ro
in "proc" enthält.
- Die Zeile
operator
passt, da sie ro
in "operator" und "/root" enthält.
Betrachten wir nun das Metazeichen Punkt (.
). Der Punkt gleicht jedes einzelne Zeichen ab. Führen Sie den folgenden Befehl aus, um zu sehen, wie sich sein Verhalten unterscheidet:
grep 'ro.' /etc/passwd
Diesmal zeigt die Ausgabe mehrere Übereinstimmungen:
root:x:0:0:root:/root:/bin/bash
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
rtkit:x:108:113:RealtimeKit,,,:/proc:/usr/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
Das Muster 'ro.'
sucht nach Zeilen, die ro
gefolgt von genau einem beliebigen Zeichen enthalten.
- Die Zeile
root
passt, da auf ro
ein o
in "root" folgt.
- Die Zeile
proxy
passt, da auf ro
ein x
in "proxy" folgt.
- Die Zeile
systemd-timesync
passt, da auf ro
ein n
in "Synchronization" folgt.
- Die Zeile
rtkit
passt, da auf ro
ein c
in "proc" folgt.
- Die Zeile
operator
passt, da auf ro
ein weiteres Zeichen in "operator" und "/root" folgt.
Durch den Vergleich der Ausgaben können Sie die Leistungsfähigkeit regulärer Ausdrücke klar erkennen. Sowohl die Muster 'roo*'
als auch 'ro.'
passen zu mehreren Zeilen und zeigen, wie verschiedene Metazeichen es Ihnen ermöglichen, Ihre Suchen auf unterschiedliche Weise fein abzustimmen.