Suchen und Finden
In PDF- und PS-Dateien suchen
Suche im Verzeichnis
Will man ein ganzes Archiv durchforsten, möchte man nicht jedes Dokument einzeln öffnen und darin suchen. Hier bewähren sich wieder die Werkzeuge auf der Kommandozeile. Der erste Kandidat erfordert etwas Bash-Know-how – er besteht aus eine Kombination von Pdftotext und Grep mit einer Pipe in einer For-Schleife:
$ for datei in $(ls *.pdf); do pdftotext $datei - | grep --color Suchstring; done
Zunächst listet das Kommando mittels ls alle PDF-Dateien im aktuellen Verzeichnis auf. Die For-Schleife arbeitet diese Liste dann zeilenweise ab. Pdftotext wandelt jede PDF-Datei aus der Liste in einfachen Text um und schickt die Ausgabe auf die Standardausgabe. Dafür sorgt der zweite Parameter (-). Grep übernimmt die Ausgabe als Eingabe und stöbert darin anschließend nach dem Suchstring.
In den Tests zeigte sich, dass das kleine Skript flink und zuverlässig arbeitet. Pdftotext kommt problemlos mit den gebräuchlichen Encodings ISO 8859-1, 8859-15 und UTF-8 zurecht. Über die Option -enc Encoding wählen Sie bei Bedarf explizit die gewünschte Zeichenkodierung zur Extraktion aus.
Sind viele Treffer zu erwarten, hilft das Kommando less, um durch die Ergebnisliste zu blättern. Sie fügen es einfach über eine weitere Pipe an die obige Kommandozeile an. Da Less die farbliche Hervorhebung der Suchtreffer nicht übernimmt, können Sie dabei die grep-Option --color im Aufruf streichen.
Als Kandidat Nummer Zwei präsentiert sich das bereits erwähnte Werkzeug Pdfgrep [8]. Es ist zwar nicht auf jeden Linux-System vorhanden, steht aber beispielsweise als offizielles Debian-Paket bereit. Analog zu Grep durchsucht es die übermittelte Dateiliste nach dem angegebenen Textfragment:
$ pdfgrep Suchstring Dateiliste
Alle Suchtreffer hebt das Tool automatisch farbig hervorgehoben. Über die Option --color <§§I>Wert<§§I> verändern Sie dieses Verhalten. Als Wert dazu kennt Pdfgrep drei Varianten: always hebt immer hervor, never schaltet die Hervorhebung ab und auto hebt nur hervor, wenn die Ausgabe auf einem Terminal erfolgt.
Als hilfreich erweisen sich auch die Optionen -n und -i. Mit -n gibt Pdfgrep zusätzlich die Seite aus, auf der der Treffer erfolgte, -i sucht unabhängig von der Groß- und Kleinschreibung. Damit lässt sich beispielsweise relativ unkompliziert in elektronischen Rechnungen stöbern.
Ein Beispiel zeigt Abbildung 8. In der ersten Spalte der Ausgabe steht der Dateiname (in Violett), danach die Seite, auf der das Fragment gefunden wurde (in Grün) und zum Schluss das gefundene Fragment (in Rot). Der Parameter -C 15 sorgt dafür, dass Pdfgrep den Kontext um den Suchtreffer mit ausgibt, wobei der Wert 15 diesen Kontext auf 15 Zeichen festsetzt. Ohne diesen Parameter gibt pdfgrep nach Möglichkeit die ganze Zeile aus, in der es das Fragment gefunden hat.
Pdfgrep unterstützt auch erweiterte reguläre Ausdrücke. Sie können damit auch nach mehreren Kriterien suchen, indem Sie die Anfrage in einen passenden regulären Ausdruck überführen. In Abbildung 9 etwa sucht Pdfgrep in allen PDF-Dokumenten nach einer Zeichenkette, die mit der Produktbezeichnung "NanoStation" beginnt, gefolgt von mindestens einem weiteren Buchstaben (.+) sowie der Seriennummer des Gerätes, beginnend mit "156D1". Die Klammern dienen der Gruppierung der einzelnen Worte.
Bilddaten
Auch einzelne Bilder lassen sich bei Bedarf vom Dokument separieren. Für Postscript gibt es dazu psrip. Für PDF steht (als Bestandteil des Pakets poppler-utils) das Werkzeug pdfimages zur Verfügung. Beide Programme haben wir bereits in Teil 6 dieser Serie [9] ausführlich vorgestellt.



