Hier grept der Bär!
Zu Befehl
Grep und find – ein starkes Team
Erinnern Sie sich an die letzte Folge, in der es um find ging? Dort wurde von einer Kombination der Befehle mit -exec gesprochen. Eine tolle Sache – denn jetzt lassen sich ganze Verzeichnisbäume rekursiv nach Zeichenketten durchsuchen. grep alleine reicht hier nicht aus, eine sinnvolle Zusammensetzung der Kommandos könnte so aussehen:
huhn@huehnerstall ~ > find . -exec grep -l bla '{}' ';'
./test/datei2
./datei3
./datei1
Im Unterschied zum Aufruf grep bla * werden hier die von find gefundenen Dateien einzeln an grep übergeben. In diesem Fall zeigt grep ohne die Option -l nicht die Datei an, in der das Suchmuster gefunden wurde, was bei mehreren Treffern leicht unübersichtlich wird.
Möchte man nur bestimmte Dateien durchforsten, kann man die Auswahl der von find zu findenden Files in verschiedener Weise einschränken: Um beispielsweise alle .tex-Dateien in allen Unterverzeichnissen nach dem String \usepackage zu durchsuchen, schreibt man
find . '*.tex' -exec grep -l '\usepackage' '{}' ';'Hinweis:
grepund Verzeichnisse
Die meisten grep-Versionen geben eine Fehlermeldung aus, wenn man ihnen als Argument einen Verzeichnisnamen übergibt. Möchte man dieses verhindern, kann man die von find ausgewählten Dateien z. B. mit der Option -type f auf reguläre Dateien beschränken.
grep findet keine Klartext-Suchmuster in komprimierten Dateien. Dazu kann man stattdessen das Kommando zgrep verwenden (siehe auch die man-Page dazu). Übrigens: Alles über komprimierte Dateien gibt's in der nächsten "Zu Befehl"-Folge – bis dahin fröhliches Greppen!
Glossar
Shell
Der Kommandozeileninterpreter – hier werden die Befehle, die Sie eintippen, dem Betriebssystem verständlich gemacht. Wie auf anderen Unix-Systemen kann man zwischen den gängigen Shell-Modellen wählen: bash (die Linux-Standard-Shell), ksh, csh etc.
Wildcards
Sonderzeichen, die Teile von Zeichenketten unbestimmt lassen. Ein Fragezeichen ? in einer Zeichenkette lässt nur denjenigen Buchstaben dieser Zeichenkette unbestimmt (z. B. h?llo => hallo, hGllo, h7llo,…), an dem sich das Fragezeichen befindet, während ein * für beliebig viele verschiedene Zeichen steht (z.B. G*ss => Guss, Genuss). Ruft man beispielsweise grep bla * auf, werden alle Dateien im aktuellen Verzeichnis nach "bla" durchsucht.
Kontext
Eigentlich bedeutet Kontext soviel wie "Zusammenhang" – übertragen auf Textdateien sind dies Zeilen, die unmittelbar vor und hinter der Fundstelle liegen. Sich diese Zeilen mit ausgeben zu lassen, hilft Ihnen dann, besser zu erkennen, welchen Ausschnitt des Textes grep gefunden hat, weil er nicht mehr so "aus dem Kontext gerissen" ist.
Pager
Ein Programm, das die Bildschirmausgabe eines anderen Programms abfängt und seitenweise anzeigt, z. B. less oder more.



