8.24. Nach Muster in einem Paket suchen

Zur Lösung dieser Aufgabe steht Ihnen das Programm dgrep mit seinen drei Varianten degrep, dfgrep und dzgrep aus dem Paket debian-goodies [Debian-Paket-debian-goodies] zur Verfügung. Dieses Shellskript kombiniert das Programm dpkg mit dem Suchwerkzeug grep und dessen Kollegen egrep, fgrep und zgrep miteinander. Je nach Bedarf suchen Sie darüber entweder in den Dateien aller bereits installierten Pakete oder lediglich in einer Auswahl davon. Nutzen Sie dzgrep, werden auch komprimierte Dateien in die Recherche mit einbezogen. Die Auflösung, welche Datei zu einem Paket gehört, erfolgt über das Programm dglob aus dem gleichen Paket.

Aufgrund der Verknüpfung der Programme können Sie zur Recherche nach dem gesuchten Muster auch die meisten der Optionen, die Sie von den grep-Varianten her kennen, einsetzen. Das schließt bspw. reguläre Ausdrücke und die farbige Hervorhebung der Suchtreffer in der Ausgabe mit ein. Ausgenommen sind jedoch Verzeichnisse und das Verfolgen von symbolischen Links.

In der nachfolgenden Ausgabe sehen Sie einen Ausschnitt des Rechercheergebnisses nach dem Muster regular im Paket bash-doc. Dabei beinhaltet die linke Spalte die Datei, in welcher das Muster auftrat, und in der rechten Spalte das Muster samt Kontext drumherum.

Suche nach dem Vorkommen des Musters regular im Paket bash-doc

$ dgrep --color regular bash-doc
/usr/share/doc/bash/examples/scripts.v2/where:    # Find all pattern matches that are executable regular files.
/usr/share/doc/bash/examples/complete/bash_completion:                  # so we can set them before handing off to regular
/usr/share/doc/bash/examples/scripts/bcsh.sh:#  A cshell-style "setenv" command is turned into a regular "set" command.
...
$

Benötigen Sie hingegen nur eine kurze Liste mit den Dateinamen, hilft Ihnen die grep-Option -l (Langfassung --files-with-matches) weiter. Für zusätzliche Optionen werfen Sie bitte einen Blick in die Manpage zu grep. Nachfolgend sehen Sie einen Ausschnitt des Suchergebnisses nach dem Muster regular über alle installierten Pakete ohne Berücksichtigung der Groß- und Kleinschreibung (Option -i bzw. --ignore-case in der Langfassung).

Suche nach dem Vorkommen des Musters regular in allen installierten Paketen (Kurzfassung). 

$ dgrep -l -i regular bash-doc
/usr/lib/perl5/XML/LibXML/Error.pm
/usr/lib/perl5/XML/LibXML/XPathContext.pod
/usr/lib/perl5/XML/LibXML/Text.pod
/usr/lib/perl5/XML/LibXML/RegExp.pod
/usr/share/doc/module-assistant/index.html
/usr/share/doc/libfftw3-3/README.Debian
/usr/share/perl5/Text/WrapI18N.pm
/usr/share/doc/chromium/README.source
/usr/share/doc/bash/examples/scripts.v2/where
/usr/share/doc/bash/examples/complete/bash_completion
/usr/share/doc/bash/examples/scripts/bcsh.sh
...
$