1

我想知道是否有任何方法可以pdf使用 shell 脚本检查文件中是否有字符串?我正在寻找类似的东西:

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

3 回答 3

3

这种方法按页面转换 .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将要转换的范围限制为仅由数字标识的一页$pgrep --color=always允许在随后的echo. fileid=""只需确保 .pdf 文档的文件名仅针对多个匹配项打印一次。

于 2013-01-22T03:16:37.760 回答
2

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

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

while read line; do

    if [[ ${line} =~ [0-9]{4}(-[0-9]{2}){2} ]]; then
        echo ">>> Found date;";
    fi

done < <(pdftotext infile.pdf -)
于 2013-01-22T02:00:25.827 回答
0

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

我会试试这个:

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

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

于 2013-01-22T02:56:28.220 回答