grep

Aus Mikiwiki
Wechseln zu: Navigation, Suche

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.
-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
country DE.gif Wikipedia ger grepwbm Enzyklopädischer Artikel
country US.gif Wikipedia eng grepwbm Enzyklopädischer Artikel