Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Linux und Vernetzung Zuletzt aktualisiert: September 13, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

grep, das ursprünglich für Unix-basierte Systeme entwickelt wurde, ist eines der am häufigsten verwendeten Befehlszeilenprogramme in Linux-Systemen.

Sein Name stammt von einem anderen ähnlichen Befehl in ed tool, nämlich g/re/p, der für global nach einem zugularen Ausdruck und print passende Zeilen. grep sucht grundsätzlich nach einem bestimmten Muster oder regulären Ausdruck aus der Standardeingabe oder einer Datei und gibt die Zeilen aus, die den vorgegebenen Kriterien entsprechen. Es wird oft verwendet, um unnötige Details herauszufiltern und nur die benötigten Informationen aus großen Protokolldateien auszugeben.

Die Macht der regulärer Ausdruck kombiniert mit unterstützten Optionen in grep macht dies möglich.

Hier werden wir einige der am häufigsten verwendeten grep-Befehle in verschiedenen Szenarien behandeln, indem wir sysadmin oder Entwickler.

Fangen wir also an...👨‍💻

grep Befehlssyntax

Der Befehl grep erwartet ein Muster und optionale Argumente zusammen mit einer Dateiliste, wenn er ohne Piping verwendet wird.

$ grep [options] pattern [files]

Ein einfaches Beispiel ist:

$ grep my file.txt
my_file
$

Suche in mehreren Dateien

grep ermöglicht es Ihnen, nicht nur in einer, sondern in mehreren Dateien nach einem bestimmten Muster zu suchen. Hier sehen Sie, wie Sie ein Muster in mehreren Dateien suchen können, indem Sie * Platzhalter.

$ sudo grep -i err /var/log/messages*

Ausgabe:

$ sudo grep err /var/log/messages*
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
/var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
/var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
$

Aus der obigen Ausgabe können Sie ersehen, dass zuerst der Dateiname ausgegeben wird, bevor die entsprechende Zeile gedruckt wird, um anzuzeigen, wo grep das vorgegebene Muster gefunden.

Groß-/Kleinschreibung unempfindliche Suche

grep bietet die Möglichkeit, ein Muster zu suchen, ohne die Groß-/Kleinschreibung des Musters zu beachten. verwenden -i Flagge, um grep anzuweisen, Groß- und Kleinschreibung zu ignorieren.

$ grep -i [pattern] [file]

Ausgabe:

$ grep -i it text_file.txt
This is a sample text file. It contains
functionality. You can always use grep with any
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$

Ganzes Wort suchen

Es ist nicht immer so, dass wir eine Teilübereinstimmung wollen, sondern wir erwarten, dass grep nur ein komplettes Wort findet. Sie können das mit -w Flagge.

$ grep -w [pattern] [file]

Ausgabe:

$ grep -w is text_file.txt
This is a sample text file. It contains
This is a sample text file. It's repeated two times.
$

Anzahl der Treffer prüfen

Manchmal benötigen wir statt der tatsächlich gefundenen Zeile nur die Anzahl der erfolgreichen Treffer, die grep erzielt hat. Wir können diese Anzahl mit -c Option.

$ grep -c [pattern] [file]

Ausgabe:

$ grep -c is text_file.txt
2
$

Unterverzeichnisse durchsuchen

Oft ist es notwendig, Dateien nicht nur im aktuellen Arbeitsverzeichnis, sondern auch in Unterverzeichnissen zu suchen. grep erlaubt es Ihnen, dies einfach zu tun mit -r Flagge.

$ grep -r [pattern] *

Ausgabe:

$ grep -r Hello *
dir1/file1.txt:Hello One
dir1/file2.txt:Hello Two
dir1/file3.txt:Hello Three
$

Wie Sie sehen können, durchläuft grep jedes Unterverzeichnis innerhalb des aktuellen Verzeichnisses und listet die Dateien und Zeilen auf, in denen eine Übereinstimmung gefunden wurde.

Inverse Suche

Wenn Sie etwas finden wollen, das nicht mit einem bestimmten Muster übereinstimmt, ermöglicht grep genau das mit -v Flagge.

$ grep -v [pattern] [file]

Ausgabe:

$ grep This text_file.txt
This is a sample text file. It contains
This is a sample text file. It's repeated two times.
$ grep -v This text_file.txt
several lines to be used as part of testing grep
functionality. You can always use grep with any
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
alphabets and special characters like - + * # etc.
$

Sie können die Ausgabe von grep für dasselbe Muster und dieselbe Datei mit und ohne -v Flagge. Mit -vDie Zeilen, die nicht mit dem Muster übereinstimmen, werden gedruckt.

Zeilennummern drucken

Mit grep können Sie Zeilennummern zusammen mit den gedruckten Zeilen ausgeben, so dass Sie leicht erkennen können, wo sich die Zeile in der Datei befindet. verwenden -n wie gezeigt, um Zeilennummern in der Ausgabe zu erhalten.

$ grep -n [pattern] [file]

Ausgabe:

$ grep -n This text_file.txt
1:This is a sample text file. It contains
7:This is a sample text file. It's repeated two times.
$

grep-Ausgabe einschränken

Bei großen Dateien wie Protokollen usw. kann die grep-Ausgabe sehr lang sein, und Sie brauchen vielleicht nur eine bestimmte Anzahl von Zeilen in der Ausgabe, anstatt alles zu finden. Wir können verwenden -m[num] um die Anzahl der gedruckten Zeilen zu begrenzen. So wird sie verwendet:

$ grep -m[num] [pattern] [file]

Beachten Sie, dass die Verwendung von -m Flag beeinflusst die Ausgabe von grep für die gleichen Bedingungen im folgenden Beispiel:

$ grep It text_file.txt
This is a sample text file. It contains
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$ grep -m2 It text_file.txt
This is a sample text file. It contains
It supports numbers like 1, 2, 3 etc. as well as
$

Zusätzliche Zeilen anzeigen

Oft werden nicht nur die Zeilen benötigt, die ein übereinstimmendes Muster aufweisen, sondern auch einige Zeilen darüber oder darunter, um den Kontext zu verbessern.

Es ist möglich, eine Zeile über oder unter (oder beides) einer Zeile mit einem Muster mit grep zu drucken, indem man -A, -B oder -C Flaggen mit num Wert. Hier num gibt die Anzahl der zusätzlich auszugebenden Zeilen an, die direkt über oder unter der gefundenen Zeile stehen. Dies gilt für alle Treffer, die grep in der angegebenen Datei oder Dateiliste findet.

$ grep -A[num] [pattern] [file]

OR

$ grep -B[num] [pattern] [file]

OR

$ grep -C[num] [pattern] [file]

Die folgende Ausgabe zeigt sowohl eine normale grep-Ausgabe als auch eine Ausgabe mit dem Flag -A, -B und -C einen nach dem anderen. Beachten Sie, wie grep die Flags und ihre Werte sowie die Änderungen in der jeweiligen Ausgabe interpretiert. Mit -A1 Flag, gibt grep 1 Zeile aus, die direkt auf die passende Zeile folgt.

Ähnlich verhält es sich mit -B1 Flag, wird 1 Zeile vor der passenden Zeile gedruckt. Mit -C1 Flag, wird 1 Zeile vor und nach der passenden Zeile gedruckt.

$ grep numbers text_file.txt
It supports numbers like 1, 2, 3 etc. as well as
$ grep -A1 numbers text_file.txt
It supports numbers like 1, 2, 3 etc. as well as
alphabets and special characters like - + * # etc.
$ grep -B1 numbers text_file.txt
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
$ grep -C1 numbers text_file.txt
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
alphabets and special characters like - + * # etc.
$

Dateinamen auflisten

Um nur den Namen der Dateien auszugeben, in denen ein Muster gefunden wurde, anstatt der tatsächlich übereinstimmenden Zeilen, verwenden Sie -l Flagge.

$ grep -l [pattern] [file]

Hier ist ein Beispiellauf:

$ grep -l su *.txt
file.txt
text_file.txt
$

Genaue Zeilen drucken

Manchmal müssen wir Zeilen ausgeben, die genau mit einem bestimmten Muster übereinstimmen, nicht nur einen Teil davon. grep erlaubt -x Flagge, um genau das zu tun.

$ grep -x [pattern] [file]

Im folgenden Beispiel enthält file.txt eine Zeile mit nur einem Wort "support" und wird daher von grep mit -x und ignoriert dabei Zeilen, die neben anderem Text auch das Wort "Support" enthalten können.

$ grep -x support *.txt
file.txt:support
$ 

Startzeichenfolge abgleichen

Mit regulären Ausdrücken können wir eine Zeichenkette am Anfang einer Zeile finden. So geht's.

$ grep [options] "^[string]" [file]

Beispiel:

$ grep It text_file.txt
This is a sample text file. It contains
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$ grep ^It text_file.txt
It supports numbers like 1, 2, 3 etc. as well as
$

Beobachten Sie, wie die ^ Zeichen ändert die Ausgabe. ^ gibt den Anfang der Zeichenkette an und grep findet den Treffer ^It als jede Zeile, die mit dem Wort It. Das Einschließen in Anführungszeichen kann helfen, wenn das Muster Leerzeichen usw. enthält.

Ende der Zeichenkette abgleichen

Ein weiterer nützlicher regulärer Ausdruck ist die Übereinstimmung mit dem Muster für das Zeilenende.

$ grep [options] "[string]$" [file]

Beispiel:

$ grep "\." text_file.txt
This is a sample text file. It contains
functionality. You can always use grep with any
kind of data but it works best with text data.
It supports numbers like 1, 2, 3 etc. as well as
alphabets and special characters like - + * # etc.
This is a sample text file. It's repeated two times.
$ grep "\.$" text_file.txt
kind of data but it works best with text data.
alphabets and special characters like - + * # etc.
This is a sample text file. It's repeated two times.
$

Wir haben versucht, eine . Zeichen am Ende der Zeile. Da der Punkt (.) ein Zeichen mit besonderer Bedeutung ist, müssen wir ihn mit \ Zeichen. Beachten Sie auch hier, wie die Ausgabe variiert, wenn wir nur mit . Zeichen und wenn wir $ um grep anzuweisen, nur solche Zeilen zu finden, die mit . (nicht die, die es irgendwo dazwischen enthalten können).

Musterdatei verwenden

Es kann Situationen geben, in denen Sie eine komplexe Liste von Mustern haben, die Sie häufig verwenden. Anstatt sie jedes Mal aufzuschreiben, können Sie eine Liste von Mustern in einer Datei angeben und sie mit -f Flagge. Die Datei sollte ein Muster pro Zeile enthalten.

$ grep -f [pattern_file] [file_to_match]

In unserem Beispiel haben wir Musterdateinamen erstellt pattern.txt mit folgendem Inhalt:

$ cat pattern.txt
This
It
$

Um sie zu benutzen, verwenden Sie -f Flagge.

$ grep -f pattern.txt text_file.txt
This is a sample text file. It contains
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$

Mehrere Muster spezifizieren

grep erlaubt die Angabe von mehreren Mustern mit -e Flagge.

$ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file]

Beispiel:

$ grep -e is -e It -e to text_file.txt
This is a sample text file. It contains
several lines to be used as part of testing grep
It supports numbers like 1, 2, 3 etc. as well as
This is a sample text file. It's repeated two times.
$

Erweitertes RegEx spezifizieren

grep unterstützt auch erweiterte reguläre Ausdrücke oder ERE mit -E Flagge. Dies ist vergleichbar mit egrep Befehl in Linux.

Die Verwendung von ERE hat einen Vorteil, wenn Sie Metazeichen als solche behandeln und nicht wie grep als Zeichenketten ersetzen wollen. Dies gibt Ihnen mehr Flexibilität in Bezug auf das Escapen, wie es im Fall von grep erforderlich ist. Abgesehen davon ist die Verwendung von -E mit grep ist gleichbedeutend mit egrep Befehl.

$ grep -E '[Extended RegEx]' [file]

Hier ist eine Anwendung von ERE, bei der wir Zeilen ausgeben wollen, die nicht kommentiert oder leer sind. Dies ist besonders nützlich, um etwas in großen Konfigurationsdateien zu finden. Ich habe zusätzlich verwendet -v Flagge, um Zeilen, die dem Muster entsprechen, NICHT zu drucken '^(#|$)'.

$ sudo grep -vE '^(#|$)' /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem       sftp    /usr/libexec/openssh/sftp-server
$

Schlussfolgerung

Die obigen Beispiele sind nur die Spitze des Eisbergs. grep unterstützt eine Reihe von Optionen und kann eine sehr nützliches Instrument in der Hand einer Person, die weiß, wie man sie effektiv einsetzt. Wir können nicht nur die oben genannten Beispiele verwenden, sondern sie auf verschiedene Weise kombinieren, um das zu bekommen, was wir brauchen.

Lesen Sie die Manpage, um mehr über dieses Programm zu erfahren.

$ man grep

Als nächstes lernen Sie Beispiele für SFTP-Befehle.

  • Abhishek Nair
    Autor
Dank an unsere Sponsoren
Weitere gute Lektüre zu Linux
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder