Можно ли искать несколько файлов PDF с помощью команды 'grep'. Кажется, это не работает, как люди ищут контент в нескольких файлах PDF?
Ну, PDF - это двоичный формат, и grep может искать двоичные файлы, как если бы они были текстовыми
grep -a
или вы можете просто использовать pdftotext (который поставляется с xpdf) следующим образом:
pdftotext whee.pdf | grep pattern
Вы не упоминаете, какую операционную систему вы используете, но в Mac OS X вы можете использовать mdfind из командной строки:
mdfind
mdfind -onlyin search/directory/path "kind:pdf search text"
Pdf - это двоичный формат, поэтому его поиск с помощью grep не так полезен.Вы можете искать строки в формате PDF с помощью grep следующим образом:
ls dir_with_pdfs/*.pdf|xargs strings|grep "keyword"
Или вы можете использовать команду pdf2text в PDF, а затем искать результаты с помощью grep.
используйте что-то вроде Solr или клоцен Я думаю, что они могут делать то, что вы хотите.
Этот инструмент pdfgrep сделает всю работу.Синтаксис похож на grep.Для поиска по нескольким файлам достаточно простого сценария оболочки.Например:
$> ls Documents/*.pdf | xargs pdfgrep -n -H "system" Documents/2005-DoddGutierrezRO-MAN1.pdf:1: designed episodic memory system Documents/2005-DoddGutierrezRO-MAN1.pdf:1: how ISAC's episodic memory system is Documents/2005-DoddGutierrezRO-MAN1.pdf:1: cognitive system employs a combination ....
PDF - это двоичный дамп объектов, используемый для отображения страниц.Могут быть некоторые метаданные, которые вы можете получить, но фактический текст страницы находится в потоке Postscript и может кодироваться различными способами.Это также не гарантируется в любом порядке.Вам нужно думать о PDF как о файле векторного изображения, а не о текстовом файле.
Существует небольшая статья, более подробно объясняющая текст в PDF-файлах: http://pdf.jpedal.org/java-pdf-blog/bid/27187/Understanding-the-PDF-file-format-text-streams
Если у вас установлен pdftotext через пакет popplar, попробуйте этот скрипт perl:
#!/usr/bin/perl my $p = shift; foreach my $fn (@ARGV) { open(F,"pdftotext $fn - |"); while (<F>) { print "$fn:$_" if /$p/; } close(F); }