Linux-Befehl grep
Der Linux-Befehl grep (globaler regulärer Ausdruck) wird verwendet, um in Dateien nach Zeichenfolgen oder regulären Ausdrücken zu suchen, die den Kriterien entsprechen.
Der grep-Befehl wird verwendet, um nach Dateien zu suchen, deren Inhalt ein bestimmtes Muster enthält. Wenn der Inhalt einer Datei dem angegebenen Muster entspricht, zeigt der grep-Befehl standardmäßig die Zeile an, die dieses Muster enthält. Wenn kein Dateiname angegeben ist oder wenn der angegebene Dateiname-, dann liest der grep-Befehl Daten vom Standardeingabegerät.
Syntax
grep [options] pattern [files] oder grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
- pattern – Gibt die Zeichenfolge oder den regulären Ausdruck an, nach der bzw. dem gesucht werden soll.
- files – Gibt die zu durchsuchenden Dateinamen an; es können mehrere Dateien gleichzeitig durchsucht werden. Wenn der Parameter files weggelassen wird, werden standardmäßig Daten von der Standardeingabe gelesen.
Gängige Optionen::
-i: Groß-/Kleinschreibung beim Abgleichen ignorieren.-v: Umgekehrte Suche, nur Zeilen ausgeben, die nicht übereinstimmen.-n: Die Zeilennummern der übereinstimmenden Zeilen anzeigen.-r: Rekursiv nach Dateien in Unterverzeichnissen suchen.-l: Nur die Namen der übereinstimmenden Dateien ausgeben.-c: Nur die Anzahl der übereinstimmenden Zeilen ausgeben.
Weitere Parameterbeschreibungen:
- -a oder --text: Binärdaten nicht ignorieren.
- -A<Anzahl der anzuzeigenden Zeilen> oder --after-context=<Anzahl der anzuzeigenden Zeilen>: Zusätzlich zur Anzeige der Zeile, die dem Muster entspricht, auch den Inhalt nach dieser Zeile anzeigen.
- -b oder --byte-offset: Vor der Anzeige der Zeile, die dem Muster entspricht, die Nummer des ersten Zeichens in dieser Zeile angeben.
- -B<Anzahl der anzuzeigenden Zeilen> oder --before-context=<Anzahl der anzuzeigenden Zeilen>: Zusätzlich zur Anzeige der Zeile, die dem Muster entspricht, auch den Inhalt vor dieser Zeile anzeigen.
- -c oder --count: Die Anzahl der Zeilen zählen, die dem Muster entsprechen.
- -C<Anzahl der anzuzeigenden Zeilen> oder --context=<Anzahl der anzuzeigenden Zeilen> oder -<Anzahl der anzuzeigenden Zeilen>: Zusätzlich zur Anzeige der Zeile, die dem Muster entspricht, auch den Inhalt vor und nach dieser Zeile anzeigen.
- -d <action> or --directories=<action>: Wenn das angegebene Suchziel ein Verzeichnis statt einer Datei ist, muss dieser Parameter verwendet werden; andernfalls gibt der grep-Befehl eine Meldung aus und beendet sich.
- -e<pattern> or --regexp=<pattern>: Gibt eine Zeichenkette als Muster für die Suche in Dateiinhalten an.
- -E or --extended-regexp: Behandelt das Muster als erweiterten regulären Ausdruck.
- -f<rule file> or --file=<rule file>: Gibt eine Regeldatei an, deren Inhalt ein oder mehrere Regelmuster enthält, sodass grep Dateiinhalte durchsuchen kann, die den Regelkriterien entsprechen. Das Format ist ein Regelmuster pro Zeile.
- -F or --fixed-regexp: Behandelt das Muster als eine Liste fester Zeichenketten.
- -G or --basic-regexp: Behandelt das Muster als einen gewöhnlichen regulären Ausdruck.
- -h or --no-filename: Vor der Anzeige der Zeile, die dem Muster entspricht, wird der Dateiname, zu dem die Zeile gehört, nicht angegeben.
- -H or --with-filename: Vor der Anzeige der Zeile, die dem Muster entspricht, wird der Dateiname, zu dem die Zeile gehört, angegeben.
- -i or --ignore-case: Ignoriert Unterschiede in der Groß-/Kleinschreibung.
- -l or --file-with-matches: Listet die Namen von Dateien auf, deren Inhalte dem angegebenen Muster entsprechen.
- -L or --files-without-match: Listet die Namen von Dateien auf, deren Inhalte nicht dem angegebenen Muster entsprechen.
- -n or --line-number: Vor der Anzeige der Zeile, die dem Muster entspricht, wird die Zeilennummer dieser Zeile angegeben.
- -o oder --only-matching: Nur den Teil anzeigen, der PATTERN entspricht.
- -q oder --quiet oder --silent: Keine Informationen anzeigen.
- -r oder --recursive: Dieser Parameter hat denselben Effekt wie die Angabe des Parameters "-d recurse".
- -s oder --no-messages: Keine Fehlermeldungen anzeigen.
- -v oder --invert-match: Alle Zeilen anzeigen, die den übereinstimmenden Text nicht enthalten.
- -V oder --version: Versionsinformationen anzeigen.
- -w oder --word-regexp: Nur Zeilen anzeigen, die mit ganzen Wörtern übereinstimmen.
- -x --line-regexp: Nur Zeilen anzeigen, die der gesamten Zeile entsprechen.
- -y : Dieser Parameter hat denselben Effekt wie die Angabe des Parameters "-i".
Beispiele
1. Suche nach der Zeichenkette "hello" in der Datei file.txt und gib die übereinstimmenden Zeilen aus:
grep hello file.txt
2. Durchsuche alle Dateien im Verzeichnis dir rekursiv nach Zeilen, die dem regulären Ausdruck "pattern" entsprechen, und gib die Dateinamen und Zeilennummern der übereinstimmenden Zeilen aus:
grep -r -n pattern dir/
3. Suche nach der Zeichenkette "world" in der Standardeingabe und gib nur die Anzahl der übereinstimmenden Zeilen aus:
echo "hello world" | grep -c world
4. Durchsuchen Sie im aktuellen Verzeichnis Dateien mit dem Suffix "file" in ihren Namen nach Dateien, die die Zeichenkette "test" enthalten, und geben Sie die Zeilen aus, die diese Zeichenkette enthalten. In diesem Fall können Sie den folgenden Befehl verwenden:
grep test *file
Das Ergebnis ist wie folgt:
$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件 testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行 testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行 testfile_2:Linux test #列出testfile_2 文件中包含test字符的行
5. Suchen Sie rekursiv nach Dateien, die die Kriterien erfüllen. Um beispielsweise Dateien zu finden, die die Zeichenkette "update" in allen Dateien unter dem angegebenen Verzeichnis /etc/acpi und dessen Unterverzeichnissen (falls vorhanden) enthalten, und den Inhalt der Zeilen auszugeben, die diese Zeichenkette enthalten, verwenden Sie den folgenden Befehl:
grep -r update /etc/acpi
Das Ausgabeergebnis ist wie folgt:
$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi” #下包含“update”的文件 /etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.) Rather than /etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.) Rather than /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update
6. Umgekehrte Suche. Die vorherigen Beispiele suchen nach den Zeilen, die die Kriterien erfüllen, und geben sie aus. Mit dem Parameter "-v" können Sie den Inhalt von Zeilen ausgeben, die die Kriterien nicht erfüllen.
Um Zeilen zu finden, die "test" nicht enthalten, in Dateien, deren Dateinamen "test" enthalten, verwenden Sie den folgenden Befehl:
grep -v test *test*
Das Ergebnis ist wie folgt:
$ grep-v test* #查找文件名中包含test 的文件中不包含test 的行 testfile1:helLinux! testfile1:Linis a free Unix-type operating system. testfile1:Lin testfile_1:HELLO LINUX! testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM. testfile_1:THIS IS A LINUX TESTFILE! testfile_2:HELLO LINUX! testfile_2:Linux is a free unix-type opterating system.Weitere Erweiterungen
Linux-Befehlsenzyklopädie