Einführung in die Linux-Befehle grep, egrep, fgrep und rgrep
Der grep-Befehl auf Linux-Systemen ist einer der häufigsten Befehle, auf die Sie stoßen werden. Wenn wir diesen Befehl zusammenfassen müssten, würden wir sagen, dass er verwendet wird, um eine bestimmte Zeichenkette oder einen bestimmten Text in einer Datei zu finden. Aber selbst mit einer einfachen Erklärung wie dieser ist die Menge an Dingen, für die es verwendet werden kann, ziemlich erstaunlich.
Der grep-Befehl hat auch ein paar enge Verwandte, falls Sie feststellen, dass er der Aufgabe nicht gewachsen ist. Hier kommen Befehle wie egrep, fgrep und rgrep ins Spiel. Diese Befehle funktionieren alle ähnlich wie grep, erweitern jedoch die Funktionalität und vereinfachen manchmal die Syntax. Ja, das hört sich erstmal verwirrend an. Aber keine Sorge, wir helfen Ihnen in diesem Leitfaden, das Alphabet der grep-Befehle zu beherrschen.
In diesem Tutorial gehen wir verschiedene Befehlsbeispiele für grep, egrep, fgrep und rgrep unter Linux durch. Lesen Sie weiter, um zu sehen, wie diese Befehle funktionieren, und zögern Sie nicht, sie im Laufe der Zeit auf Ihrem eigenen System zu verwenden, damit Sie sich mit ihnen vertraut machen können.
In diesem Tutorial lernen Sie:
- Befehlsbeispiele für grep, egrep, fgrep, rgrep
Befehle grep, egrep, fgrep und rgrep unter Linux
grep
Für unsere Beispiele haben wir ein einfaches Textdokument mit dem Namen distros.txt erstellt, das eine Reihe von Namen von Linux-Distributionen enthält. Sehen Sie unten, wie wir grep und die zugehörigen Befehle verwenden, um diese Datei nach bestimmten Texten und Mustern zu durchsuchen.
Wie bereits erwähnt, kann
grepverwendet werden, um nach einer Zeichenkette innerhalb einer Datei zu suchen. Suchen wir nach dem Wort "Ubuntu":grep Ubuntu distros.txt UbuntuWie alles andere in Linux unterscheidet auch
grepzwischen Groß- und Kleinschreibung. Um den Fall zu ignorieren, müssen wirgrepmit der Kombination der Option-iverwenden:grep -i ubuntu distros.txt Ubuntu Kubuntu XubuntuDie Option
-nzeigt an, in welcher Zeilennummer jede Übereinstimmung gefunden wurde.grep -i -n ubuntu distros.txt 3:Ubuntu 8:Kubuntu 9:XubuntuWir können auch die Option
-v(invertieren) verwenden, um Zeilen anzuzeigen, die nicht mit unserem Suchmuster übereinstimmen.grep -iv ubuntu distros.txt Arch Linux AlmaLinux Fedora Red Hat Enterprise Linux CentOS Linux Mint Debian Manjaro openSUSEMit der Option
-ckann grep die Anzahl der Zeichenfolgenvorkommen in Dateien zählen. Hier gibt das grep also die Anzahl aus, wie oft Ubuntu NICHT in der Datei erscheint:grep -ivc ubuntu distros.txt 9Die Option
-xgibt nur exakte Vorkommen aus.grep -ix ubuntu distros.txt UbuntuSystemadministratoren werden dieses Beispiel bei der Suche nach Protokolldateien auf jeden Fall zu schätzen wissen.
-B3( Anzeige 3 Zeilen vor Übereinstimmung ) und-A3( Anzeige von 3 Zeilen nach Übereinstimmung ) geben Ihrer Ausgabe mehr Kontext.grep -B3 -A3 command /var/log/dmesg [ 0.201120] kernel: pcpu-alloc: [0] 0 [ 0.201186] kernel: Built 1 zonelists, mobility grouping on. Total pages: 515961 [ 0.201188] kernel: Policy zone: DMA32 [ 0.201191] kernel: Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.8.0-59-generic root=UUID=a80ad9d4-90ff-4903-b34d-ca70d82762ed ro quiet splash [ 0.201563] kernel: Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear) [ 0.201648] kernel: Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear) [ 0.201798] kernel: mem auto-init: stack:off, heap alloc:on, heap free:off
Wie Sie sehen können, werden alle Distributionen aufgelistet, mit Ausnahme derjenigen, die "Ubuntu" enthielten (Groß- und Kleinschreibung wird nicht beachtet).
grep und Regex
grep und reguläre Ausdrücke ist ein Thema, das ein ganzes Buch umfassen kann, aber es wäre schade, nicht zumindest ein paar Beispiele für grep und reguläre Ausdrücke zu zeigen.
-
Um
grepdazu zu bringen, nur Zeilen zurückzugeben, die Ziffern enthalten, würden wir den Befehl verwenden:grep [0-9] file.txt Um alle leeren Zeilen innerhalb einer Datei mit
grepzu zählen, verwenden wir diesen Befehl:grep -ch ^$ file.txtSchauen wir uns an, welche Zeile mit "L" beginnt und mit einer Zahl endet.
^wird verwendet, um den Anfang einer Zeile zu finden, und$wird verwendet, um das Ende einer Zeile zu finden:grep ^L.*[0-9]$ file.txtUm
grepnur auf Zeilen zu bringen, bei denen "b" ein drittes Zeichen im Wort ist, können wir den folgenden Befehl verwenden:grep ..b file.txt
egrep
EGREP ist die erweiterte Version von grep. Mit anderen Worten, egrep ist gleich grep -E. EGREP unterstützt mehr Muster für reguläre Ausdrücke.
Suchen wir nach Zeilen, die genau zwei aufeinanderfolgende "p"-Zeichen enthalten:
egrep p{2} file.txt OR grep pp file.txt OR grep -E p{2} file.txtLassen Sie uns eine Ausgabe des
egrep-Befehlsaller Zeilen erhalten, die mit "S" oder "A" enden:
egrep "S$|A$" file.txt
fgrep
fgrep ist eine schnellere Version von grep, die keine regulären Ausdrücke unterstützt und daher als schneller gilt. fgrep ist gleich grep -F. Dies ist praktisch für die Verwendung in Skripten oder für große Dateien, bei denen Sie die zusätzliche Robustheit von normalem grep nicht benötigen, da die Ergebnisse schneller und mit geringeren Auswirkungen auf die Systemressourcen zurückgegeben werden sollten.
Mit diesem Tool können Sie nur eine einfache Mustersuche verwenden, z. B. die folgende:
fgrep Fedora distros.txt Fedora-
Ausdrücke funktionieren NICHT und geben einfach eine leere Ausgabe zurück.
fgrep -i linux$ distros.txt grep -i linux$ distros.txt Arch Linux AlmaLinux Red Hat Enterprise Linux
rgrep
RGREP ist eine rekursive Version von grep. Rekursiv bedeutet in diesem Fall, dass rgrep rekursiv durch Verzeichnisse absteigen kann, während es nach dem angegebenen Muster grapst. rgrep ist ähnlich wie grep -r.
Durchsuchen Sie alle Dateien rekursiv nach einem String "linux".
rgrep -i linux * dir1/RHEL-based.txt:AlmaLinux dir1/RHEL-based.txt:Red Hat Enterprise Linux dir2/Debian-based.txt:Linux Mint
Abschließende Gedanken
In dieser Anleitung haben wir verschiedene Befehlsbeispiele für grep, egrep, fgrep und rgrep unter Linux gesehen. Im Kern werden diese Befehle nur verwendet, um in einer oder mehreren Dateien nach bestimmten Zeichenfolgenmustern zu suchen. Wie Sie an den Beispielen hier gesehen haben, kann ihre Funktionalität leicht erweitert und auf viele nützliche Szenarien angewendet werden.
