grep
Der Shell-Befehl grep (von "global/regular expression/print" bzw. "global search for a regular expression and print out matched lines") durchsucht eine oder mehrere Dateien nach einer bestimmten Zeichenfolge. Historisch entwickelte sich der Name aus dem Kommando "g/re/p" des Unix-Standardeditors ed.
Die folgenden sind Varianten von grep.
- agrep ermöglicht eine unscharfe Suche nach Zeichenketten.
- egrep ist eine erweiterte Form des Befehls.
- fgrep sucht eine fixe Zeichenkette.
Konfiguration
Anzeige der dem gefundenen Suchmuster zugeordneten Farben:.
$ echo $GREP_COLOR
Zuordnung einer türkisen, unterstrichenen Schrift auf einem Hintergrund in Magenta für das gefundene Suchmuster.
$ export GREP_COLOR="04;36;45"
Um die Variable dauerhaft zu setzen, muss sie in die Datei "~/.bashrc" eingetragen werden.
Optionen
Option | Beschreibung |
---|---|
-A 1 | Zusätzliche Ausgabe der Zeile nach der gesuchten. |
-B 1 | Zusätzliche Ausgabe der Zeile vor der gesuchten. |
--color | Zuordnung von Farben zum gefundenen Suchmuster gemäss der Variable "GREP_COLOR". |
-h | Unterdrückung der Anzeige der Dateinamen. |
-i | Keine Unterscheidung zwischen Gross- und Kleinschreibung. |
-l | Anzeige nur des Dateinamens. |
-v | Ausgabe der Zeilen, die das Suchmuster nicht enthalten. |
Syntax
Ausgabe der Zeilen von Datei "file", die "suchmuster" enthalten.
$ grep suchmuster file
Ausgabe der Namen aller Dateien im aktuellen Verzeichnis und allen Unterverzeichnissen, in denen "suchmuster" vorkommt, wobei nicht auf Gross- oder Kleinschreibung geachtet wird.
$ grep -lir "suchmuster" *
Ausgabe der Zeilen von Datei "file", die "suchmuster" enthalten. Dabei muss "suchmuster" links und rechts durch Leerzeichen oder Sonderzeichen begrenzt sein.
$ grep -w suchmuster file
Ausgabe der Zeilen von Datei "file", die "suchmuster" enthalten.
$ egrep suchmuster file
Ausgabe der Zeilen von Datei "file", die "-suchmuster" (mit vorangestelltem Strich) enthalten.
$ egrep -e -suchmuster file
Verwendung
Ausgabe aller Zeilen von Dateien, die auf ".txt" enden und die die Zeichenfolge "Linux" enthalten.
$ grep Linux *.txt
Ausgabe aller Zeilen von Dateien, die auf ".txt" enden und die die Zeichenfolge "Linux" enthalten. Die Zeichenfolge "Linux" wird in der Ausgabe rot eingefärbt.
$ grep --color=auto Linux *.txt
Ausgabe aller Zeilen von "datei1", die das Wort "Unkingen" enthalten. Dabei wird Gross- und Kleinschreibung nicht beachtet.
$ grep -i Unkingen datei1
Ausgabe aller Zeilen von "datei1", die das Wort "Unkingen" nicht enthalten. Dabei wird Gross- und Kleinschreibung nicht beachtet.
$ grep -iv Unkingen datei1
Ausgabe aller Zeilen der Datei "file.txt", die entweder "foo" oder "bar" oder beide enthalten (ODER-Verknüpfung).
$ grep -e "foo" -e "bar" file.txt
Ausgabe aller Zeilen der Datei "file.txt", die sowohl "foo" als auch "bar" enthalten (UND-Verknüpfung).
$ grep "foo" file.txt | grep "bar"
Ausgabe einer Liste aller ksh- oder bash-Prozesse.
$ ps -ef | egrep 'ksh|bash'
Ausgabe einer Liste aller Prozesse, deren Namen mit "sh" enden.
$ ps -ef | egrep '[a-z]*.sh'
Ausgabe aller Zeilen von "datei1", die entweder "meier" oder "huber" enthalten, wobei Gross- und Kleinschreibung nicht beachtet werden.
$ egrep -i "meier|huber" datei1
Ausgabe aller Zeilen von "datei1", die am Zeilenanfang das Wort "meier" enthalten, wobei Gross- und Kleinschreibung nicht beachtet werden.
$ egrep -i "^meier" datei1
Findet alle Zeilen! (nicht nur diejenigen, diejenigen die eine Zahl enthalten)
$ egrep "[0-9]*" datei1
Ausgabe aller Zeilen von "datei1", die mit der Zeichenfolge "m" beginnen und danach irgendwo "8" enthalten, wobei Gross- und Kleinschreibung nicht beachtet werden.
$ egrep -i "^m.*8" datei1
Ausgabe aller Zeilen von "datei1", die mit dem Zeichen "D" oder "d" beginnen, danach aber von einem der Zeichen a, e, i, o, u gefolgt werden oder nach Zeichen, die "Huber" enthalten", wobei Gross- und Kleinschreibung nicht beachtet werden.
$ egrep -i "[^Dd][aeiou]|Huber" datei1
Ausgabe einer Liste aller Prozesse, die "ksh" heissen.
$ ps -ef | fgrep ksh
Ausgabe einer Liste aller Dateien im Verzeichnis "/usr/include/sys/*.h", in denen die Zeichenkette "socklen_t" vorkommt.
$ fgrep -l socklen_t /usr/include/sys/*.h
Ausgabe einer Liste mit allen Dateien im Verzeichnis "/usr/include/sys/*.h", in denen der Begriff "sock[a-z]*t" vorkommt.
$ grep -l 'sock[a-z_]*t' /usr/include/sys/*.h
Liste aller Benutzer in der Datei "/etc/passwd", die in der gleichen Gruppe sind wie der aktuelle Benutzer.
$ grep /etc/passwd *:*:*:10:
Ausgabe der Anzahl Dateien im Verzeichnis "/usr/bin", bei denen das SUID gesetzt ist.
$ ls -l /usr/bin | grep '^-..s' | wc -l
Ausgabe der Dateinamen im Verzeichnis "/usr/bin", bei denen das SUID gesetzt und der Besitzer "root" ist.
$ ls -l /usr/bin | grep '^-..s.*[1-9] *root'
Ausgabe einer Liste aller Benutzer in der Datei "/etc/passwd", die in der Gruppe 1004 sind.
$ grep '.*:.:.*:1004:' /etc/passwd kurs4:x:1004:10:KURS user:/usr/kurs4:/usr/bin/ksh
Die PDF-Datei "datei.pdf" wird nach dem Suchbegriff "abc" durchsucht.
$ pdftotext datei.pdf - | grep abc
Fehlermeldungen
Die Argumentliste ist zu lang
$ grep '|' *aseq bash: /bin/grep: Die Argumentliste ist zu lang
Mögliche Lösung.
$ find . -name "*.aseq" -exec grep '|' {} \;
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | ger | grepwbm | Enzyklopädischer Artikel |
Wikipedia | eng | grepwbm | Enzyklopädischer Artikel |