grep在pdf文件上是否正常工作?

时间:2010-04-22 05:44:47

标签: pdf full-text-search grep

是否可以使用'grep'命令搜索多个pdf文件。它似乎不起作用,人们如何在多个pdf文件上搜索内容?

7 个答案:

答案 0 :(得分:4)

嗯,PDF是二进制格式,grep可以像搜索文本一样搜索二进制文件

grep -a

或者你可以像这样使用pdftotext(附带xpdf):

pdftotext whee.pdf | grep pattern

答案 1 :(得分:3)

您没有提到您正在使用的操作系统,但在Mac OS X下,您可以从命令行使用mdfind

mdfind -onlyin search/directory/path "kind:pdf search text"

答案 2 :(得分:2)

使用类似Solrclucene的内容我认为他们可以做你想做的事。

答案 3 :(得分:2)

Pdf是一种二进制格式,这就是为什么用grep搜索它没有用。你可以用grep搜索字符串是一个pdf:

ls dir_with_pdfs/*.pdf|xargs strings|grep "keyword"

或者您可以在pdf上使用 pdf2text 命令,然后使用grep搜索结果。

答案 4 :(得分:1)

PDF是用于显示页面的对象的二进制转储。可能有一些元数据可以grep但实际的页面文本在Postscript流中,并且可以以各种方式编码。它也不保证任何顺序。您需要将PDF视为矢量图像文件而不是文本文件。

有一篇简短的文章在http://pdf.jpedal.org/java-pdf-blog/bid/27187/Understanding-the-PDF-file-format-text-streams

中更详细地解释了PDF中的文字

答案 5 :(得分:1)

此工具pdfgrep将完成工作。它的语法类似于grep。要在几个文件中搜索一个简单的shell脚本。例如:

$> 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
....

答案 6 :(得分:0)

如果你通过popplar软件包安装了pdftotext,那么试试这个perl脚本:

#!/usr/bin/perl
my $p = shift;
foreach my $fn (@ARGV) {
    open(F,"pdftotext $fn - |");
    while (<F>) { print "$fn:$_" if /$p/; }
    close(F);
}