我想知道是否有办法使用shell脚本检查pdf
文件中是否有字符串?我正在寻找类似的东西:
if [search(string,pdf_file)] > 0 then
echo "exist"
fi
答案 0 :(得分: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 -)
答案 1 :(得分:2)
这种方法可以逐页转换.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文档的文件名只打印一次以进行多次匹配。
答案 2 :(得分:0)
PDF文档中的每个字母通常都是单独设置的。因此,您必须将.pdf转换为文本,这会将文本缩减为简单的流。
我会试试这个:
grep -q 'a \+string' <(pdf2text some.pdf - | tr '\n' ' ') && echo exists
tr
加入换行符。 \+
允许单词之间有1个或多个空格字符。最后,grep -q
仅根据匹配返回退出状态0/1
。它不打印匹配的行。