Website-Suche

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.

  1. Wie bereits erwähnt, kann grep verwendet werden, um nach einer Zeichenkette innerhalb einer Datei zu suchen. Suchen wir nach dem Wort "Ubuntu":

    grep Ubuntu distros.txt 
    Ubuntu
    
  2. Wie alles andere in Linux unterscheidet auch grep zwischen Groß- und Kleinschreibung. Um den Fall zu ignorieren, müssen wir grep mit der Kombination der Option -i verwenden:

    grep -i ubuntu distros.txt 
    Ubuntu
    Kubuntu
    Xubuntu
    
  3. Die Option -n zeigt an, in welcher Zeilennummer jede Übereinstimmung gefunden wurde.

    grep -i -n ubuntu distros.txt 
    3:Ubuntu
    8:Kubuntu
    9:Xubuntu
    
  4. Wir 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
    openSUSE
    
  5. Wie Sie sehen können, werden alle Distributionen aufgelistet, mit Ausnahme derjenigen, die "Ubuntu" enthielten (Groß- und Kleinschreibung wird nicht beachtet).

  6. Mit der Option -c kann 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
    9
    
  7. Die Option -x gibt nur exakte Vorkommen aus.

    grep -ix ubuntu distros.txt
    Ubuntu
    
  8. Systemadministratoren 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
    

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.

  1. Um grep dazu zu bringen, nur Zeilen zurückzugeben, die Ziffern enthalten, würden wir den Befehl verwenden:

    grep [0-9] file.txt
    
  2. Um alle leeren Zeilen innerhalb einer Datei mit grep zu zählen, verwenden wir diesen Befehl:

    grep -ch ^$ file.txt
    


  3. Schauen 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.txt
    
  4. Um grep nur 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.

  1. 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.txt
    
  2. Lassen Sie uns eine Ausgabe des egrep-Befehls aller 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.

  1. Mit diesem Tool können Sie nur eine einfache Mustersuche verwenden, z. B. die folgende:

    fgrep Fedora distros.txt 
    Fedora
    
  2. 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.

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

Verwandte Artikel: