用shell查找pdf内部的string

我想知道是否有任何方法来检查是否有一个pdf文件中使用shell脚本的string? 我正在寻找像这样的东西:

 if [search(string,pdf_file)] > 0 then echo "exist" fi 

Solutions Collecting From Web of "用shell查找pdf内部的string"

正如Simon所指出的那样,您可以简单地使用pdftotextpdf转换为纯文本,然后搜索您要查找的内容。

转换后,你可以使用grep ,bash正则表达式,或者你想要的任何变体:

 while read line; do if [[ ${line} =~ [0-9]{4}(-[0-9]{2}){2} ]]; then echo ">>> Found date;"; fi done < <(pdftotext infile.pdf -) 

这种方法可以页面转换.pdf文件,所以搜索字符串$query可以更具体地定位。

 # search for query string in available pdf files pagewise for i in *.pdf; do pagenr=$(pdfinfo "$i" | grep "Pages" | grep -o "[0-9][0-9]*") fileid="\n$i\n" for (( p=1; p<=pagenr; p++ )); do matches=$(pdftotext -q -f $p -l $p "$i" - | grep --color=always -in "$query") if [ -n "$matches" ]; then echo -e "${fileid}PAGE: $p" echo "$matches" fileid="" fi done done 

pdftotext -f $p -l $p将范围限制为只能由$p标识的一个页面转换。 grep --color=always允许保护后续echo显中的匹配高亮。 fileid=""只是确保.pdf文件的文件名只在多个匹配项中打印一次。

PDF文档中的每个字母通常是单独设置的。 因此,您必须将.pdf转换为文本,这将减少文本到一个简单的流。

我会试试这个:

 grep -q 'a \+string' <(pdf2text some.pdf - | tr '\n' ' ') && echo exists 

tr加入换行符。 \+允许在单词之间有一个或多个空格字符。 最后, grep -q仅基于匹配返回退出状态0/1 。 它不打印匹配的行。