Bei Linux- und UNIX-ähnlichen Systemen werden alle Systemkonfigurationsinformationen in Klartextform gespeichert und bearbeitet. Die Suche nach Text wäre also eine sehr häufige Aufgabe für die Bearbeitung und Protokollanalyse.
Der Befehl grep ermöglicht die Suche nach einem Text oder String in einer Datei oder aus der Ausgabekonsole eines Befehls, nach einem Begriff oder Muster, das mit regulären Ausdrücken übereinstimmt. Wenn grep eine Übereinstimmung in einer Zeile findet, kopiert es die Ergebnisse auf den Bildschirm, dh stdout.
In diesem Tutorial lernen wir, wie man den Befehl grep mit praktischen Beispielen verwendet.
Grep-Befehl
Sehen wir uns die grep-Befehlssyntax an, bevor wir mit der Erläuterung der Verwendung beginnen.
grep [OPTIONS] PATTERN [FILE...]
Wir werden die gebräuchlichsten Grep-Optionen und -Muster, die wir für die Suche verwenden können, im Detail besprechen.
Wie Sie einen String in einer Datei suchen
Im folgenden Beispiel durchsucht grep die /etc/passwd-Datei nach der Zeichenfolge „root“ und leitet die Ausgabe an stdout um.
$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
Text in mehreren Dateien suchen
Mit dem folgenden Befehl können Sie nach bestimmtem Text in mehreren Dateien suchen:
$ grep "root" /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:root
/etc/group:bin:x:1:root,bin,daemon
/etc/group:daemon:x:2:root,bin,daemon
/etc/group:sys:x:3:root,bin,adm
/etc/group:adm:x:4:root,adm,daemon
/etc/group:disk:x:6:root
/etc/group:wheel:x:10:root
Grep-Suche ohne Berücksichtigung der Groß-/Kleinschreibung
Optionen -i
sucht nach der angegebenen Zeichenkette/dem angegebenen Muster ohne Berücksichtigung der Groß-/Kleinschreibung.
In den folgenden Beispielen findet grep alle Wörter wie „hal“, „HAL“ ohne Berücksichtigung der Groß- und Kleinschreibung:
$ grep -i HAL /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
Rekursive Suche
Die rekursive Suche wird durch die Verwendung von -r
erreicht Option, die rekursiv alle Dateien durchsucht, wobei symbolische Links übersprungen werden. Wenn Sie symbolische Links einfügen möchten, verwenden Sie -R
.
Im folgenden Beispiel sucht der Befehl grep in allen Dateien in /var
nach der Zeichenfolge „ngnix“. Verzeichnis.
$ grep -r nginx /var
Suche nach einer Zeichenfolge in der Befehlsausgabe (stdout)
Sie können die Ausgabe für einen Befehl pipen und für das Muster aus seiner Ausgabe grep verwenden.
Im folgenden Beispiel suche ich mit dem ls-Befehl
nach einer Datei mit dem Namen „backup“.$ ls | grep backup
Hier mache ich mehrere Pipes und suche nach dem 'Docker'- und 'Apache'-Prozess vom ps-Befehl.
$ ps -ef | grep docker | grep apache
Reguläre Ausdrücke in Dateien
Reguläre Ausdrücke sind ein Muster, das für jede Eingabezeile abgeglichen werden muss. Basic und Extended sind die beiden regulären Ausdrücke, die vom grep-Befehl verwendet werden.
Einfacher regulärer Ausdruck
Standardmäßig interpretiert grep das Muster als einfachen regulären Ausdruck.
Das ^ (Caret)-Symbol - Das folgende Muster muss am Anfang jeder Zeile stehen. Im folgenden Beispiel wird die Zeichenfolge ^welcome nur dann übereinstimmen, wenn sie ganz am Anfang einer Zeile steht.
$ grep “^welcome” filename
Erweiterter regulärer Ausdruck
Verwenden Sie -E
( oder --extended-regexp) Option, wenn grep es als erweiterten regulären Ausdruck verstehen soll.
Der folgende Befehl extrahiert alle Links aus einer Datei
$ grep –Eoi '<a[^>]+>.*</a>' filename
o
:Standardmäßig gibt grep die gesamte Zeile aus, die das Suchmuster enthält. Diese Option weist den grep-Befehl an, nur die übereinstimmenden Wörter statt der ganzen Zeile zu drucken.
i
:Diese Option fordert den grep-Befehl auf, die Groß-/Kleinschreibung zu ignorieren, während das Muster abgeglichen wird.
Suchen Sie ein ganzes Wort mit grep
Das -w
(word-regexp) Flag für grep lässt den gegebenen Ausdruck nur auf ganze Wörter passen.
$ grep -iw "samba" /etc/samba/smb.conf
# This is the main Samba configuration file. You should read the
# here. Samba has a huge number of configurable options (perhaps too
# For a step to step guide on installing, configuring and using samba,
# read the Samba-HOWTO-Collection. This may be obtained from:
Zeigt Zeilen nach dem String-Match an
Das -A
Option, die das N
anzeigt Zeilen nach dem String-Match.
$ grep -A 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
Zeige Zeilen vor dem String-Match
Wir können -B
verwenden Option zum Anzeigen von N Zeilen vor dem String für eine bestimmte Datei
$ grep -B 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
Mehrere Zeichenfolgen suchen
Wir können mehrere Muster oder Zeichenfolgen mit dem OR-Operator |
durchsuchen und \|
. -E
(extended-regexp) steuert, ob bestimmte Sonderzeichen maskiert werden müssen. -e
ist ausschließlich das Flag zur Angabe des Musters, mit dem Sie übereinstimmen möchten.
Beispiel 1:Verwendung der Option -E
$ ls | grep -E “li|ovo”
linux24
ovo8_linux24.sh
Oder
$ grep -E "foo|bar" *.txt
Beispiel 2:ohne -E
$ ls | grep ‘li\|ovo’
linux24
ovo8_linux24.sh
Oder
$ grep "foo\|soul\|bar" *.txt
Ausschließen einer bestimmten Datei von der Suche
Sie können die Option -v verwenden, um die Suche zu ignorieren. Der folgende Befehl sucht die Zeichenfolge „error“ in allen Dateien außer „syslog.log“
$ grep -r error * | grep -v ‘/\syslog.log/’
Schlussfolgerung
In diesem Tutorial haben wir gelernt, wie man den Befehl grep verwendet, um Text in Dateien zu finden. Ich hoffe, Sie haben es genossen, dies zu lesen, und hinterlassen Sie bitte Ihre Vorschläge im Kommentarbereich unten.