Muster mit einfachen regulären Ausdrücken abgleichen
In diesem Schritt erkunden Sie, wie Sie einfache reguläre Ausdrücke (Basic Regular Expressions, BRE) mit grep verwenden, um flexiblere Suchmuster zu erstellen. In BRE haben bestimmte Zeichen, sogenannte Metazeichen, spezielle Bedeutungen, die über ihren literalen Wert hinausgehen. Dies ermöglicht es Ihnen, Muster statt nur fester Zeichenfolgen zu suchen.
Wir schauen uns zwei grundlegende Metazeichen an: * (Sternchen) und . (Punkt).
Untersuchen wir zuerst das Sternchen (*). Dieses Metazeichen entspricht dem unmittelbar vorangehenden Zeichen null oder beliebig oft. Um dies in Aktion zu sehen, führen Sie den folgenden Befehl aus. Wir setzen das Muster in einfache Anführungszeichen ('roo*'), um sicherzustellen, dass die Shell es als literales Muster behandelt und nicht versucht, das * als Platzhalter für Dateinamen zu interpretieren.
grep 'roo*' /etc/passwd
Die Ausgabe wird wahrscheinlich mehrere Zeilen zeigen:
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 enthalten, gefolgt von null oder mehr os.
- Die
root-Zeile passt, da sie roo enthält (ro gefolgt von einem o).
- Die
proxy-Zeile passt, da sie ro enthält (ro gefolgt von null os) im Wort "proxy".
- Die
systemd-timesync-Zeile passt, da sie ro in "Synchronization" enthält.
- Die
rtkit-Zeile passt, da sie ro in "proc" enthält.
- Die
operator-Zeile passt, da sie ro sowohl in "operator" als auch in "/root" enthält.
Schauen wir uns nun das Punkt-Metazeichen (.) an. Der Punkt entspricht genau einem beliebigen Zeichen. Führen Sie den folgenden Befehl aus, um den Unterschied zu sehen:
grep 'ro.' /etc/passwd
Diesmal zeigt die Ausgabe verschiedene Treffer:
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 enthalten, gefolgt von genau einem beliebigen Zeichen.
- Die
root-Zeile passt, weil auf ro ein o in "root" folgt.
- Die
proxy-Zeile passt, weil auf ro ein x in "proxy" folgt.
- Die
systemd-timesync-Zeile passt, weil auf ro ein n in "Synchronization" folgt.
- Die
rtkit-Zeile passt, weil auf ro ein c in "proc" folgt.
- Die
operator-Zeile passt, weil auf ro ein weiteres Zeichen in "operator" und "/root" folgt.
Durch den Vergleich der Ausgaben wird die Mächtigkeit regulärer Ausdrücke deutlich. Beide Muster 'roo*' und 'ro.' finden mehrere Zeilen, zeigen aber, wie unterschiedliche Metazeichen es Ihnen ermöglichen, Ihre Suche auf verschiedene Weise fein abzustimmen.