16 grep-Befehlsbeispiele, die Ihnen in der realen Welt helfen
Veröffentlicht: 2021-02-23grep, ursprünglich für Unix-basierte Systeme entwickelt, ist eines der am häufigsten verwendeten Befehlszeilen-Dienstprogramme in Linux-Boxen.
Sein Name stammt von einem anderen ähnlichen Befehl in ed tool, dh g / re / p , was für globale Suche nach einem regulären Ausdruck und Druck passender Zeilen steht. grep sucht grundsätzlich nach einem bestimmten Muster oder regulären Ausdruck aus der Standardeingabe oder Datei und gibt die Zeilen aus, die den angegebenen Kriterien entsprechen. Es wird oft verwendet, um unnötige Details herauszufiltern, während nur die erforderlichen Informationen aus großen Protokolldateien gedruckt werden.
Die Leistungsfähigkeit regulärer Ausdrücke in Kombination mit unterstützten Optionen in grep macht dies möglich.
Hier werden wir einige der häufig verwendeten grep-Befehle in verschiedenen Szenarien von Systemadministratoren oder Entwicklern behandeln.
Also lasst uns anfangen…
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 $
Durchsuchen mehrerer Dateien
Mit grep können Sie nicht nur in einer, sondern in mehreren Dateien nach dem angegebenen Muster suchen. So können Sie mithilfe des Platzhalters *
in mehreren Dateien nach einem Muster suchen.
$ 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. $
Sie können der obigen Ausgabe entnehmen, dass der Dateiname zuerst gedruckt wird, bevor die passende Zeile gedruckt wird, um anzugeben, wo grep
das angegebene Muster gefunden hat.
Suche ohne Berücksichtigung der Groß-/Kleinschreibung
grep bietet an, ein Muster zu suchen, ohne den Fall des Musters zu betrachten. Verwenden Sie das Flag -i
, 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. $
Suche nach ganzen Wörtern
Es ist nicht immer so, dass wir eine teilweise Übereinstimmung wünschen, sondern erwarten, dass grep nur ein vollständiges Wort findet. Sie können dies mit dem Flag -w
tun.
$ 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. $
Überprüfen Sie die Anzahl der Übereinstimmungen
Manchmal benötigen wir anstelle der tatsächlich übereinstimmenden Zeile nur die Anzahl der erfolgreichen Übereinstimmungen, die grep vorgenommen hat. Wir können diese Anzahl mit der Option -c
abrufen.
$ grep -c [pattern] [file]
Ausgabe:
$ grep -c is text_file.txt 2 $
Unterverzeichnisse durchsuchen
Häufig ist es erforderlich, Dateien nicht nur im aktuellen Arbeitsverzeichnis, sondern auch in Unterverzeichnissen zu durchsuchen. Mit grep können Sie dies ganz einfach mit dem Flag -r
tun.
$ 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 eines aktuellen Verzeichnisses und listet die Dateien und Zeilen auf, in denen eine Übereinstimmung gefunden wird.
Inverse Suche
Wenn Sie etwas finden möchten, das nicht mit einem bestimmten Muster übereinstimmt, ermöglicht grep genau dies mit dem Flag -v
.
$ 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 des Befehls grep
für dasselbe Muster und dieselbe Datei mit und ohne Flag -v
vergleichen. Mit -v
werden alle Zeilen gedruckt, die nicht mit dem Muster übereinstimmen.
Zeilennummern drucken
Mit grep können Sie Zeilennummern zusammen mit gedruckten Zeilen drucken, wodurch Sie leicht erkennen können, wo sich die Zeile in der Datei befindet. Verwenden Sie die Option -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 begrenzen
Bei großen Dateien wie Protokollen usw. kann die grep-Ausgabe lang sein und Sie benötigen möglicherweise nur eine feste Anzahl von Zeilen in der Ausgabe, anstatt alles abzugleichen. Wir können – m[num]
verwenden, um die gedruckten Zeilen durch num einzuschränken. So verwenden Sie es:
$ grep -m[num] [pattern] [file]
Beachten Sie, wie sich die Verwendung des Flags -m
auf die Ausgabe von grep für denselben Satz von Bedingungen im folgenden Beispiel auswirkt:
$ 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 brauchen wir nicht nur die Linien, die ein übereinstimmendes Muster haben, sondern einige Linien darüber oder darunter für einen besseren Kontext.

Es ist möglich, eine Zeile über oder unter (oder beides) einer Zeile mit einem Muster zu drucken, indem grep verwendet wird, indem die Flags -A
, -B
oder -C
mit einem num
-Wert verwendet werden. Hier bezeichnet num
die Anzahl der zusätzlich zu druckenden Zeilen, die direkt über oder unter der übereinstimmenden Zeile liegen. Dies gilt für alle Übereinstimmungen, die grep in der angegebenen Datei oder Dateiliste findet.
$ grep -A[num] [pattern] [file]
ODER
$ grep -B[num] [pattern] [file]
ODER
$ grep -C[num] [pattern] [file]
Die folgende Ausgabe zeigt eine normale grep-Ausgabe sowie eine Ausgabe mit den Flags -A
, -B
und -C
nacheinander. Beachten Sie, wie grep die Flags und ihre Werte und die Änderungen in der jeweiligen Ausgabe interpretiert. Mit dem Flag -A1
druckt grep 1 Zeile, die direkt nach der passenden Zeile folgt.
In ähnlicher Weise wird mit dem Flag -B1
Zeile direkt vor der übereinstimmenden Zeile gedruckt. Mit dem Flag -C1
wird 1 Zeile gedruckt, die vor und nach der übereinstimmenden Zeile liegt.
$ 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 die Namen der Dateien auszugeben, in denen ein Muster gefunden wird, anstatt tatsächlich übereinstimmende Zeilen, verwenden Sie das Flag -l
.
$ grep -l [pattern] [file]
Hier ist ein Beispiellauf:
$ grep -l su *.txt file.txt text_file.txt $
Exakte Zeilen drucken
Manchmal müssen wir Linien drucken, die genau mit einem bestimmten Muster übereinstimmen, nicht mit einem Teil davon. grep erlaubt -x
flag genau das zu tun.
$ grep -x [pattern] [file]
Im folgenden Beispiel enthält file.txt eine Zeile mit nur einem Wort „support“ und wird als solche von grep mit dem Flag -x
abgeglichen, während Zeilen ignoriert werden, die möglicherweise die Wörter „support“ zusammen mit anderem Text enthalten.
$ grep -x support *.txt file.txt:support $
Match-Startzeichenfolge
Mit regulären Ausdrücken können wir eine Zeichenfolge am Anfang einer Zeile finden. Hier ist, wie es geht.
$ 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 Verwendung des Zeichens ^
die Ausgabe ändert. ^
gibt den Anfang der Zeichenfolge an und grep passte ^It
als jede Zeile an, die mit dem Wort It
beginnt. Das Einschließen in Anführungszeichen kann hilfreich sein, wenn das Muster Leerzeichen usw. enthält.
Match-Ending-String
Ein weiterer üblicher nützlicher regulärer Ausdruck ist der Abgleich mit dem Ende des Linienmusters.
$ 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 Zeilenende. Da Punkt (.) ein besonderes Bedeutungszeichen ist, müssen wir es mit \
-Zeichen maskieren. Beachten Sie erneut, wie die Ausgabe variiert, wenn wir nur übereinstimmen .
Zeichen und wenn wir $
verwenden, um grep anzuweisen, nur solche Zeilen zu finden, die mit enden .
(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 es jedes Mal aufzuschreiben, können Sie eine Liste von Mustern in einer Datei angeben und mit dem Flag -f
verwenden. Die Datei sollte ein Muster pro Zeile enthalten.
$ grep -f [pattern_file] [file_to_match]
In unserem Beispiel haben wir pattern.txt
mit den folgenden Inhalten erstellt:
$ cat pattern.txt This It $
Um es zu verwenden, verwenden Sie das Flag -f
.
$ 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. $
Geben Sie mehrere Muster an
grep ermöglicht die Angabe mehrerer Muster mit dem Flag -e
.
$ 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. $
Geben Sie den erweiterten RegEx an
grep unterstützt auch erweiterte reguläre Ausdrücke oder ERE mit dem Flag -E
. Dies ähnelt dem egrep
Befehl in Linux.
Die Verwendung von ERE hat einen Vorteil, wenn Sie Metazeichen so behandeln möchten, wie sie sind, und sie nicht als Zeichenfolgen wie grep ersetzen möchten. Dies gibt Ihnen mehr Flexibilität in Bezug auf das Maskieren, wie wir es im Fall von grep tun müssen. Davon abgesehen entspricht die Verwendung von -E
mit grep dem Befehl egrep
.
$ grep -E '[Extended RegEx]' [file]
Hier ist eine Verwendung von ERE, bei der wir Zeilen drucken möchten, die nicht kommentiert oder leer sind. Dies ist besonders nützlich, um etwas in großen Konfigurationsdateien zu finden. Ich habe zusätzlich das Flag -v
verwendet, um NICHT Zeilen zu drucken, die dem Muster '^(#|$)'
entsprechen.
$ 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 $
Fazit
Die obigen Beispiele sind nur die Spitze des Eisbergs. grep unterstützt eine Reihe von Optionen und kann ein sehr nützliches Werkzeug in der Hand einer Person sein, die weiß, wie man es effektiv einsetzt. Wir können die oben angegebenen Beispiele nicht nur verwenden, sondern sie auf verschiedene Weise kombinieren, um das zu bekommen, was wir brauchen.
Weitere Informationen finden Sie auf der Manpage.
$ man grep
Lernen Sie als Nächstes SFTP-Befehlsbeispiele kennen.