Grep - Dateiinhalte suchen und finden in Linux - Ubuntu [Deutsch/German]
Inhaltsverzeichnis:
- Grep-Befehlssyntax
- So verwenden Sie
grep
zum Suchen nach einer Zeichenfolge in Dateien - Treffer invertieren (ausschließen)
- Verwendung von Grep zur Suche nach einer Zeichenfolge in der Befehlsausgabe
- rekursive Suche
- Nur Anzeigen der Dateiname
- Suche ohne Berücksichtigung der Groß- / Kleinschreibung
- Suche nach vollständigen Wörtern
- Zeilennummern anzeigen
- Zähle Übereinstimmungen
- Suche nach mehreren Strings (Patterns)
- Ruhemodus
- Grundlegender regulärer Ausdruck
- Erweiterte reguläre Ausdrücke
- Zeilen vor einer Übereinstimmung drucken
- Zeilen nach einer Übereinstimmung drucken
- Fazit
Der Befehl
grep
der für "global regular expression print" steht, ist einer der leistungsstärksten und am häufigsten verwendeten Befehle unter Linux.
Grep sucht eine oder mehrere Eingabedateien für Linien, die ein bestimmtes Muster entsprechen und schreiben auf der Standardausgabe jede passende Zeile. Wenn keine Dateien angegeben sind, liest
grep
von der Standardeingabe, die normalerweise die Ausgabe eines anderen Befehls ist.
In diesem Tutorial zeigen wir Ihnen
grep
von praktischen Beispielen und detaillierten Erklärungen der gebräuchlichsten GNU
grep
Optionen, wie Sie den Befehl
grep
.
Grep-Befehlssyntax
Bevor wir mit der Verwendung des Befehls
grep
beginnen, überprüfen wir zunächst die grundlegende Syntax.
Die
grep
Dienstprogrammausdrücke haben die folgende Form:
grep PATTERN
Die Elemente in eckigen Klammern sind optional.
-
OPTIONS
-OPTIONS
oder mehr Optionen. Grep bietet eine Reihe von Optionen, die sein Verhalten steuern.PATTERN
- Suchmuster.FILE
- Keine oder mehrere Eingabedateinamen.
Um die Datei durchsuchen zu können, muss der Benutzer, der den Befehl ausführt, Lesezugriff auf die Datei haben.
So verwenden Sie
grep
zum Suchen nach einer Zeichenfolge in Dateien
Die einfachste Verwendung des Befehls
grep
ist die Suche nach einer Zeichenfolge (Text) in einer Datei.
Um zum Beispiel die Linien von der zum Anzeigen
/etc/passwd
- Datei die Zeichenfolge enthält
bash
Sie den folgenden Befehl verwenden:
grep bash /etc/passwd
Die Ausgabe sollte ungefähr so aussehen:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Wenn die Zeichenfolge Leerzeichen enthält, müssen Sie sie in einfache oder doppelte Anführungszeichen setzen:
grep "Gnome Display Manager" /etc/passwd
Treffer invertieren (ausschließen)
Um die Linien angezeigt werden, die nicht mit einem Muster übereinstimmen, verwenden Sie die
-v
(oder
--invert-match
) Option.
Um beispielsweise die Zeilen aus der Datei
/etc/passwd
anzuzeigen, die den String
nologin
nicht enthalten,
nologin
Sie den folgenden Befehl verwenden:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Verwendung von Grep zur Suche nach einer Zeichenfolge in der Befehlsausgabe
Anstatt Eingabedateien anzugeben, können Sie die Ausgabe eines anderen Befehls an
grep
und dann nur Zeilen anzeigen, die mit einem bestimmten Muster übereinstimmen.
Um beispielsweise herauszufinden, welche Prozesse auf Ihrem System als Benutzer-
www-data
, können Sie den folgenden Befehl
ps
:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Sie können auch mehrere Pipes auf Befehl verketten. Wie Sie in der obigen Ausgabe sehen können, gibt es auch eine Zeile, die den
grep
Prozess enthält. Wenn diese Zeile nicht angezeigt werden soll, leiten Sie die Ausgabe wie unten gezeigt an eine andere
grep
Instanz weiter.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
rekursive Suche
Verwenden Sie zum rekursiven Suchen nach einem Muster die Option
-r
(oder
--recursive
). Dadurch werden alle Dateien im angegebenen Verzeichnis durchsucht und die rekursiv gefundenen Symlinks übersprungen. Verwenden Sie die Option
-R
(oder
--dereference-recursive
), um allen symbolischen Links zu folgen.
Im folgenden Beispiel suchen wir in allen Dateien im Verzeichnis
/etc
nach der Zeichenfolge
linuxize.com
:
grep -r linuxize.com /etc
Der Befehl gibt die übereinstimmenden Zeilen aus, denen der vollständige Pfad zur Datei vorangestellt ist.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Wenn Sie stattdessen die Option
-r
verwenden, folgt
grep
allen symbolischen Links:
grep -R linuxize.com /etc
Beachten Sie die letzte Zeile der Ausgabe. Diese Zeile wird im obigen Beispiel nicht gedruckt, da Dateien im
sites-enabled
Verzeichnis von Nginx symbolische Links zu Konfigurationsdateien im
sites-available
Verzeichnis sind.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Nur Anzeigen der Dateiname
Um die Standard-
grep
Ausgabe zu unterdrücken und nur die Namen von Dateien mit dem passenden Muster zu drucken, können Sie die Option
-l
(oder
--files-with-matches
) verwenden.
Um zum Beispiel alle Dateien zu durchsuchen, die mit
.conf
im aktuellen Arbeitsverzeichnis enden, und nur die Namen von Dateien zu drucken, die den String
linuxize.com
enthalten, geben Sie
linuxize.com
:
grep -l linuxize.com *.conf
Die Ausgabe sieht ungefähr so aus:
tmux.conf haproxy.conf
Die Option
-l
wird normalerweise in Kombination mit der rekursiven Option
-R
:
Suche ohne Berücksichtigung der Groß- / Kleinschreibung
Standardmäßig unterscheidet der Befehl
grep
Groß- und Kleinschreibung. Dies bedeutet, dass Groß- und Kleinbuchstaben als unterschiedlich behandelt werden.
Verwenden Sie die Option
-i
(oder
--ignore-case
), um die Groß- / Kleinschreibung bei der Suche zu ignorieren.
Wenn Sie beispielsweise ohne Option nach
Zebra
suchen, zeigt der folgende Befehl keine Ausgabe an, dh es gibt übereinstimmende Zeilen:
grep Zebra /usr/share/words
Wenn Sie jedoch eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung mit der Option
-i
, werden sowohl Groß- als auch Kleinbuchstaben berücksichtigt:
grep -i Zebra /usr/share/words
Die Angabe von „Zebra“ entspricht „Zebra“, „ZEbrA“ oder einer anderen Kombination von Groß- und Kleinbuchstaben für diese Zeichenfolge.
Suche nach vollständigen Wörtern
Bei der Suche nach "gnu" druckt
grep
auch die Zeilen, in denen "gnu" in größere Wörter wie "cygnus" oder "magnum" eingebettet ist.
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Verwenden Sie die Option
-w
(oder
--word-regexp
), um nur die Zeilen zurückzugeben, in denen die angegebene Zeichenfolge ein ganzes Wort (eingeschlossen von Nicht-Wort-Zeichen) ist.
az
,
AZ
und
0-9
) und Unterstriche (
_
). Alle anderen Zeichen werden als Nichtwortzeichen betrachtet.
grep -w gnu /usr/share/words
Zeilennummern anzeigen
Verwenden Sie die Option
-n
(oder
--line-number
), um die Anzahl der Zeilen
--line-number
die eine Zeichenfolge enthalten, die einem Muster entspricht. Bei Verwendung dieser Option druckt
grep
die Übereinstimmungen mit der Standardausgabe, der die Zeilennummer vorangestellt ist, auf der sie gefunden wurde.
Um beispielsweise die Zeilen aus der Datei
/etc/services
anzuzeigen, in der die Zeichenfolge
bash
mit der entsprechenden Zeilennummer vorangestellt ist, können Sie den folgenden Befehl verwenden:
grep -n 10000 /etc/services
Die folgende Ausgabe zeigt uns, dass die Übereinstimmungen in den Zeilen 10423 und 10424 gefunden werden.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Zähle Übereinstimmungen
Verwenden Sie die Option
-c
(oder
--count
), um die Anzahl der übereinstimmenden Zeilen für die Standardausgabe zu drucken.
Im Beispiel unten, zählen wir die Anzahl der Konten, die haben
/usr/bin/zsh
als Shell.
grep -c '/usr/bin/zsh' /etc/passwd
Suche nach mehreren Strings (Patterns)
Zwei oder mehr Suchmuster können mit dem Operator OR
|
verknüpft werden.
Standardmäßig interpretiert
grep
das Muster als einfachen regulären Ausdruck, in dem die Metazeichen wie
|
verlieren ihre besondere Bedeutung, und ihre Versionen mit umgekehrten Schrägstrichen müssen verwendet werden.
Im Beispiel unten wir alle Vorkommen der Wörter suchen
fatal
,
error
und
critical
in der Nginx Protokollfehlerdatei:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Ruhemodus
Die
-q
(oder
--quiet
) erzählt
grep
nicht schreiben etwas an das Endgerät (Standardausgabe). Wird eine Übereinstimmung gefunden, wird der Befehl mit dem Status
0
. Dies ist nützlich, wenn Sie
grep
in Shellskripten verwenden, bei denen Sie überprüfen möchten, ob eine Datei eine Zeichenfolge enthält, und abhängig vom Ergebnis eine bestimmte Aktion ausführen möchten.
Hier ist ein Beispiel für die Verwendung von
grep
im stillen Modus als Testbefehl in einer
if
Anweisung:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Grundlegender regulärer Ausdruck
GNU Grep verfügt über zwei Funktionssätze für reguläre Ausdrücke, Basic und Extended. Standardmäßig interpretiert
grep
das Muster als einfachen regulären Ausdruck.
Wenn in einfachen regulären Ausdruck Modus verwendet, alle anderen Zeichen mit Ausnahme der Meta-Zeichen sind eigentlich reguläre Ausdrücke, die sich entsprechen. Nachfolgend finden Sie eine Liste der am häufigsten verwendeten Metazeichen:
-
Verwenden Sie das Symbol
^
(Caret), um den Ausdruck am Zeilenanfang abzugleichen. Im folgende Beispiel wird die Zeichenfolge^kangaroo
nur überein, wenn es am Anfang einer Zeile auftritt.grep "^kangaroo" file.txt
Verwenden Sie das Symbol
$
(Dollar), um den Ausdruck am Ende einer Zeile abzugleichen. Im folgenden Beispiel wird die Zeichenfolgekangaroo$
wird nur überein, wenn es am Ende einer Zeile auftritt.grep "kangaroo$" file.txt
Verwenden Sie die
.
(Punkt-) Symbol für ein beliebiges einzelnes Zeichen. Um beispielsweise eine Übereinstimmung zu finden, die mitkan
beginnt, dann zwei Zeichen hat und mit der Zeichenfolgeroo
endet, können Sie das folgende Muster verwenden:grep "kan..roo" file.txt
Verwenden
accept
" oder "accent
" enthalten, können Sie das folgende Muster verwenden:grep "accet" file.txt
Verwenden
co(any_letter_except_l)a
beliebigen Kombination von Zeichenfolgenco(any_letter_except_l)a
dieco(any_letter_except_l)a
, z. B.coca
,cobalt
usw.,co(any_letter_except_l)a
jedoch nicht mit den Zeilen überein, diecola
enthalten.grep "coa" file.txt
Verwenden Sie das Symbol
\
(Backslash), um die spezielle Bedeutung des nächsten Zeichens zu umgehen.
Erweiterte reguläre Ausdrücke
Um das Muster als erweiterte regulären Ausdruck zu interpretieren, verwenden Sie die
-E
(oder
--extended-regexp
) Option. Erweiterte reguläre Ausdrücke enthalten alle grundlegenden Metazeichen sowie zusätzliche Metazeichen, um komplexere und leistungsfähigere Suchmuster zu erstellen. Im Folgenden sind einige Beispiele:
-
Alle E-Mail-Adressen aus einer bestimmten Datei abgleichen und extrahieren:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
Entspricht und extrahiert alle gültigen IP-Adressen aus einer bestimmten Datei:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
Die Option
-o
wird verwendet, um nur die übereinstimmende Zeichenfolge zu drucken.
Zeilen vor einer Übereinstimmung drucken
Verwenden Sie die Option
-B
(oder
--before-context
), um eine bestimmte Anzahl von Zeilen vor dem Abgleichen von Zeilen zu drucken.
Um beispielsweise fünf Zeilen des führenden Kontexts anzuzeigen, bevor sie übereinstimmen, verwenden Sie den folgenden Befehl:
Zeilen nach einer Übereinstimmung drucken
Verwenden Sie die Option
-A
(oder
--after-context
), um eine bestimmte Anzahl von Zeilen nach dem Abgleichen von Zeilen zu drucken.
Um beispielsweise fünf Zeilen des nachgestellten Kontexts nach übereinstimmenden Zeilen anzuzeigen, verwenden Sie den folgenden Befehl:
Fazit
Mit dem Befehl
grep
können Sie in Dateien nach einem Muster suchen. Wenn eine Übereinstimmung gefunden wird, druckt grep die Zeilen, die das angegebene Muster enthalten.
Auf der Handbuchseite von Grep finden Sie weitere Informationen zu Grep.
grep terminalCp Befehl in Linux (Dateien kopieren)
cp ist ein Befehlszeilenprogramm zum Kopieren von Dateien und Verzeichnissen auf Unix- und Linux-Systemen.
Ls Befehl in Linux (Dateien und Verzeichnisse auflisten)
Der Befehl ls ist einer der grundlegenden Befehle, die jeder Linux-Benutzer kennen sollte. Es wird verwendet, um Informationen zu Dateien und Verzeichnissen im Dateisystem aufzulisten.
So verschieben Sie Dateien und Verzeichnisse unter Linux (Befehl mv)
Das Verschieben von Dateien und Verzeichnissen ist eine der grundlegendsten Aufgaben, die Sie häufig auf einem Linux-System ausführen müssen. In diesem Lernprogramm wird erläutert, wie Sie mit dem Befehl mv Dateien und Verzeichnisse verschieben.