GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verwenden Sie den Grep-Befehl, um Text in Dateien zu finden

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.


Linux
  1. Wie finde ich alle Dateien, die keine Textzeichenfolge enthalten?

  2. Wie finde ich mehrere Zeichenfolgen in Dateien?

  3. So verwenden Sie den Linux-Befehl find zum Suchen von Dateien

  4. Wie finde ich unter Linux alle Dateien, die bestimmten Text enthalten?

  5. Wie verwende ich den Befehl find, um Dateien zu löschen, die einem Muster entsprechen?

So verwenden Sie den grep-Befehl unter Debian 10

So finden Sie Dateien mit dem fd-Befehl in Linux

So verwenden Sie grep unter Linux

Finden Sie Text in Dateien unter Linux mit grep

So verwenden Sie den More-Befehl in Linux, um große Textdateien zu lesen

So finden und ersetzen Sie Text in Vim