Dies funktioniert auch in Mac OSX (Mavericks). Installieren Sie es mit Brew. Einfach. Vielen Dank.
Mikiemorales
7
Aus Neugier habe ich die Quelle von pdfgrep überprüft und es verwendet Poppler, um Zeichenfolgen aus dem PDF zu extrahieren. Fast genau wie die Antwort von @wag, aber vermutlich nicht das gesamte Dokument.
Andrew Martin
4
pdfgrephat auch eine rekursive Flagge. So könnte diese Antwort vielleicht reduziert werden: pdfgrep -R pattern /path/. Es ist jedoch möglicherweise weniger effektiv, wenn jede Datei durchsucht wird, auch wenn es sich nicht um eine PDF-Datei handelt. Und ich stelle fest, dass es Probleme mit internationalen Zeichen wie å, ä und ö gibt.
Rovanion
1
Tatsächlich ist die -nOption ein Profi für pdfgrep, da die Seitenzahl in die Ausgabe einbezogen werden kann (möglicherweise hilfreich für die weitere Verarbeitung).
10.
4
Diese Antwort wäre einfacher zu verwenden, wenn erklärt würde, welche Bits des Befehls wörtlich kopiert werden sollen und welche Platzhalter sind. Was ist pattern? Was ist {}? Was ist los mit dem "+"? Ich habe beim ersten Lesen keine Ahnung ... also gehe ich zur Manpage, nehme ich an.
Mark Amery
56
Wenn Sie poppler-utilsUbuntu Desktop installiert haben (Standardeinstellung auf Ubuntu Desktop), können Sie es im Handumdrehen "konvertieren" und an folgende Adresse weiterleiten grep:
Also ... extrahieren Sie den Text, bevor Sie ihn abfragen, was bedeutet, dass die Antwort "nein" ist.
Akira
18
@akira Das OP bedeutete wahrscheinlich "ohne das PDF in einem Viewer zu öffnen und als Text zu exportieren"
Michael Mrozek
5
@akira Wo siehst du "grep only"?
Michael Mrozek
6
@akira Nun, ich habe bereits gesagt, was er wohl gemeint hat. Er möchte nicht in Text exportieren, bevor er ihn verarbeitet. Ich bezweifle sehr , er hat ein Problem mit jedem Befehl, der in irgendeiner Weise in Text umwandelt; Es gibt keinen Grund, es nicht zu
tun
2
@sherrellbc Das zweite Argument von pdftotextist der Dateiname, in den geschrieben werden soll. In der Regel können Sie mit Tools jedoch stdoutin eine Datei schreiben, anstatt sie mit a -zu versehen. In ähnlicher Weise würden einige Tools stdoutstandardmäßig schreiben, wenn Sie ein solches Argument vollständig weglassen (dies ist jedoch nicht immer möglich, ohne Mehrdeutigkeiten zu erzeugen).
Joost
11
pdfgrep wurde genau für diesen Zweck geschrieben und ist in Ubuntu verfügbar.
Es versucht größtenteils kompatibel zu sein grepund bietet somit "die Kraft von grep", das nur auf PDFs spezialisiert ist. Dazu gehören gemeinsame grep Optionen, wie zum Beispiel --recursive, --ignore-caseoder --color.
Im Gegensatz dazu pdftotext | grepkann pdfgrep die Seitenzahl einer Übereinstimmung performant ausgeben und ist im Allgemeinen schneller, wenn nicht das gesamte Dokument durchsucht werden muss (z . B. --max-countoder --quiet).
Die grundlegende Verwendung ist:
pdfgrep PATTERN FILE..
Wo PATTERNist Ihre Suchzeichenfolge und FILEeine Liste der Dateinamen (oder Platzhalter in einer Shell).
Ein PDF besteht aus Datenblöcken, von denen einige Text, einige Bilder und einige wirklich magische XYZ-Dateien (z. B. .u3d-Dateien) sind. Diese Chunks sind meistens komprimiert (z. B. flat, siehe http://www.verypdf.com/pdfinfoeditor/compression.htm ). Um eine PDF-Datei zu "greifen", müssen Sie die Komprimierung umkehren und den Text extrahieren.
Sie können dies entweder per Datei mit Tools wie pdf2textund grep des Ergebnisses tun , oder Sie führen einen 'Indexer' (siehe xapian.org oder lucene ) aus, der aus Ihren PDF-Dateien einen durchsuchbaren Index erstellt, und dann können Sie die Suche verwenden Engine-Tools dieses Indexers, um den Inhalt des PDF-Dokuments abzurufen.
Aber nein, Sie können keine grepPDF-Dateien und hoffen auf zuverlässige Antworten, ohne den Text zuerst zu extrahieren.
Berücksichtigt man das pdfgrepVorhandensein (so), ist ein pauschales "Nein" falsch.
Jonathan Cross
6
Recoll kann PDFs durchsuchen. Es unterstützt keine regulären Ausdrücke, bietet jedoch viele andere Suchoptionen, sodass es möglicherweise Ihren Anforderungen entspricht.
Ja - mein Verstand scheint mit Streams besser zu funktionieren ... :-)
Andy Smith
12
funktioniert nicht, wenn der Text komprimiert ist, was meistens der Fall ist.
Akira
6
Auch wenn der Text nicht komprimiert ist, handelt es sich in der Regel um kleine Sätze (nicht unbedingt ganze Wörter!), Die mit Formatierungsinformationen fein vermischt sind. Nicht sehr freundlich für stringsoder grep.
Jander
Können Sie sich einen anderen Grund vorstellen, warum die Verwendung von Zeichenfolgen dafür nicht funktioniert? Ich habe festgestellt, dass die Verwendung von Zeichenfolgen bei einigen PDFs funktioniert, bei anderen jedoch nicht.
Rückstunde
3
Werfen Sie einen Blick auf das allgemeine Ressourcentool grep crgrep, das die Suche in PDF-Dateien unterstützt.
Sie können auch andere Ressourcen durchsuchen, z. B. in Archiven verschachtelte Inhalte, Datenbanktabellen, Bild-Metadaten, POM-Datei-Abhängigkeiten und Webressourcen - und Kombinationen davon, einschließlich rekursiver Suche.
Warum um alles in der Welt verwenden Sie ls, um Dateinamen in Parameter zu setzen? Es ist nicht nur langsamer, sondern auch eine schlechte Idee, die lsAusgabe als Eingabe für andere Befehle zu verwenden . Nur pdfgrep 'pattern' *.pdfist genug
phuclv
1
Es gibt eine doppelte Frage zu StackOverflow. Die Leute dort schlagen eine Variante von harish.venkarts vor. Antwort:
Der Vorteil gegenüber der ähnlichen Antwort ist hier das --with-filenameFlag für grep. Dies ist auch pdfgrep etwas überlegen, da das Standard-grep mehr Funktionen hat.
Ich nehme an, Sie meinen, tp konvertieren es nicht auf der Festplatte, Sie können sie konvertieren stdoutund dann mit grep pdftotext. Das Übertragen von PDFs ohne jegliche Konvertierung ist kein praktischer Ansatz, da PDFes sich meist um Binärformate handelt.
Auch weil es sich bei einigen pdfum Scans handelt, müssen sie zuerst mit OCR versehen werden. Ich habe einen ziemlich einfachen Weg geschrieben, um alle PDFs, die nicht bearbeitet werden können, zu durchsuchen grepund sie mit OCR zu versehen.
Ich habe festgestellt, dass eine pdfDatei, die keine Schriftart enthält, normalerweise nicht durchsuchbar ist. Wenn wir das wissen, können wir es nutzen pdffonts.
Die ersten pdffontsbeiden Zeilen des sind die Tabellenüberschriften. Wenn also eine Datei durchsucht werden kann, werden mehr als zwei Zeilen ausgegeben.
gedit check_pdf_searchable.sh
Dann fügen Sie diese ein
#!/bin/bash
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
pypdfocr "$1"
fi
dann mach es ausführbar
chmod +x check_pdf_searchable.sh
Listen Sie dann alle nicht durchsuchbaren PDFs im Verzeichnis auf:
ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}
oder im Verzeichnis und seinen Unterverzeichnissen:
Wenn Sie nur nach PDF-Namen / -Eigenschaften suchen möchten ... oder nach einfachen Zeichenfolgen, die nicht komprimiert oder codiert sind strings, können Sie stattdessen die folgenden verwenden
grep -a STRING file.pdf
cat -v file.pdf | grep STRING
Von grep --help:
--binary-files=TYPE assume that binary files are TYPE;
TYPE is 'binary', 'text', or 'without-match'
-a, --text equivalent to --binary-files=text
und cat --help:
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
Wenn Sie Gnome verwenden, ist gpdf möglicherweise genau das Richtige für Sie! Überprüfen Sie dies, falls Sie Gnome nicht verwenden. Es gibt eine Liste von CLI-PDF-Viewern. Dann können Sie verwenden grep, um ein Muster zu finden.
Antworten:
Installieren Sie das Paket
pdfgrep
und verwenden Sie dann den Befehl:——————
Der einfachste Weg ist
quelle
pdfgrep
hat auch eine rekursive Flagge. So könnte diese Antwort vielleicht reduziert werden:pdfgrep -R pattern /path/
. Es ist jedoch möglicherweise weniger effektiv, wenn jede Datei durchsucht wird, auch wenn es sich nicht um eine PDF-Datei handelt. Und ich stelle fest, dass es Probleme mit internationalen Zeichen wie å, ä und ö gibt.-n
Option ein Profi für pdfgrep, da die Seitenzahl in die Ausgabe einbezogen werden kann (möglicherweise hilfreich für die weitere Verarbeitung).pattern
? Was ist{}
? Was ist los mit dem "+"? Ich habe beim ersten Lesen keine Ahnung ... also gehe ich zur Manpage, nehme ich an.Wenn Sie
poppler-utils
Ubuntu Desktop installiert haben (Standardeinstellung auf Ubuntu Desktop), können Sie es im Handumdrehen "konvertieren" und an folgende Adresse weiterleitengrep
:Dadurch wird keine TXT-Datei erstellt.
quelle
pdftotext
ist der Dateiname, in den geschrieben werden soll. In der Regel können Sie mit Tools jedochstdout
in eine Datei schreiben, anstatt sie mit a-
zu versehen. In ähnlicher Weise würden einige Toolsstdout
standardmäßig schreiben, wenn Sie ein solches Argument vollständig weglassen (dies ist jedoch nicht immer möglich, ohne Mehrdeutigkeiten zu erzeugen).pdfgrep wurde genau für diesen Zweck geschrieben und ist in Ubuntu verfügbar.
Es versucht größtenteils kompatibel zu sein
grep
und bietet somit "die Kraft von grep", das nur auf PDFs spezialisiert ist. Dazu gehören gemeinsame grep Optionen, wie zum Beispiel--recursive
,--ignore-case
oder--color
.Im Gegensatz dazu
pdftotext | grep
kann pdfgrep die Seitenzahl einer Übereinstimmung performant ausgeben und ist im Allgemeinen schneller, wenn nicht das gesamte Dokument durchsucht werden muss (z . B.--max-count
oder--quiet
).Die grundlegende Verwendung ist:
Wo
PATTERN
ist Ihre Suchzeichenfolge undFILE
eine Liste der Dateinamen (oder Platzhalter in einer Shell).Weitere Informationen finden Sie auf der Manpage .
quelle
Nein.
Ein PDF besteht aus Datenblöcken, von denen einige Text, einige Bilder und einige wirklich magische XYZ-Dateien (z. B. .u3d-Dateien) sind. Diese Chunks sind meistens komprimiert (z. B. flat, siehe http://www.verypdf.com/pdfinfoeditor/compression.htm ). Um eine PDF-Datei zu "greifen", müssen Sie die Komprimierung umkehren und den Text extrahieren.
Sie können dies entweder per Datei mit Tools wie
pdf2text
und grep des Ergebnisses tun , oder Sie führen einen 'Indexer' (siehe xapian.org oder lucene ) aus, der aus Ihren PDF-Dateien einen durchsuchbaren Index erstellt, und dann können Sie die Suche verwenden Engine-Tools dieses Indexers, um den Inhalt des PDF-Dokuments abzurufen.Aber nein, Sie können keine
grep
PDF-Dateien und hoffen auf zuverlässige Antworten, ohne den Text zuerst zu extrahieren.quelle
pdfgrep
Vorhandensein (so), ist ein pauschales "Nein" falsch.Recoll kann PDFs durchsuchen. Es unterstützt keine regulären Ausdrücke, bietet jedoch viele andere Suchoptionen, sodass es möglicherweise Ihren Anforderungen entspricht.
quelle
Sie könnten es
strings
zuerst durchpfeifen : -quelle
strings file.pdf | grep <...>
Sie einfach , Sie brauchen nichtcat
strings
odergrep
.Werfen Sie einen Blick auf das allgemeine Ressourcentool grep crgrep, das die Suche in PDF-Dateien unterstützt.
Sie können auch andere Ressourcen durchsuchen, z. B. in Archiven verschachtelte Inhalte, Datenbanktabellen, Bild-Metadaten, POM-Datei-Abhängigkeiten und Webressourcen - und Kombinationen davon, einschließlich rekursiver Suche.
quelle
Versuche dies
zum drucken der zeilen erscheint das muster im pdf
quelle
cd in ihren ordner mit ihrer pdf-datei und dann ..
oder wenn Sie in mehr als einer pdf-Datei suchen möchten (zB in allen pdf-Dateien in Ihrem Ordner)
oder
quelle
ls
Ausgabe als Eingabe für andere Befehle zu verwenden . Nurpdfgrep 'pattern' *.pdf
ist genugEs gibt eine doppelte Frage zu StackOverflow. Die Leute dort schlagen eine Variante von harish.venkarts vor. Antwort:
Der Vorteil gegenüber der ähnlichen Antwort ist hier das
--with-filename
Flag für grep. Dies ist auch pdfgrep etwas überlegen, da das Standard-grep mehr Funktionen hat.https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files
quelle
Hier ist ein schnelles Skript für die Suche nach PDF im aktuellen Verzeichnis:
quelle
Ich nehme an, Sie meinen, tp konvertieren es nicht auf der Festplatte, Sie können sie konvertieren
stdout
und dann mit greppdftotext
. Das Übertragen von PDFs ohne jegliche Konvertierung ist kein praktischer Ansatz, daPDF
es sich meist um Binärformate handelt.Im Verzeichnis:
oder im Verzeichnis und seinen Unterverzeichnissen:
Auch weil es sich bei einigen
pdf
um Scans handelt, müssen sie zuerst mit OCR versehen werden. Ich habe einen ziemlich einfachen Weg geschrieben, um alle PDFs, die nicht bearbeitet werden können, zu durchsuchengrep
und sie mit OCR zu versehen.Ich habe festgestellt, dass eine
pdf
Datei, die keine Schriftart enthält, normalerweise nicht durchsuchbar ist. Wenn wir das wissen, können wir es nutzenpdffonts
.Die ersten
pdffonts
beiden Zeilen des sind die Tabellenüberschriften. Wenn also eine Datei durchsucht werden kann, werden mehr als zwei Zeilen ausgegeben.Dann fügen Sie diese ein
dann mach es ausführbar
Listen Sie dann alle nicht durchsuchbaren PDFs im Verzeichnis auf:
oder im Verzeichnis und seinen Unterverzeichnissen:
quelle
Wenn Sie nur nach PDF-Namen / -Eigenschaften suchen möchten ... oder nach einfachen Zeichenfolgen, die nicht komprimiert oder codiert sind
strings
, können Sie stattdessen die folgenden verwendenVon
grep --help
:und
cat --help
:quelle
Wenn Sie Gnome verwenden, ist gpdf möglicherweise genau das Richtige für Sie! Überprüfen Sie dies, falls Sie Gnome nicht verwenden. Es gibt eine Liste von CLI-PDF-Viewern. Dann können Sie verwenden
grep
, um ein Muster zu finden.quelle