# 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
4条答案
按热度按时间wribegjk1#
这种方法按页转换.pdf文件,因此可以更具体地定位搜索字符串
$query
的位置。pdftotext -f $p -l $p
将转换范围限制为仅一个由数字$p
标识的页面。grep --color=always
允许在随后的echo
中保护匹配高光。fileid=""
只是确保.pdf文档的文件名对于多个匹配项只打印一次。t8e9dugd2#
正如Simon所指出的那样,您可以使用
pdftotext
将pdf
转换为纯文本,然后只需搜索您要查找的内容。转换后,您可以使用
grep
,bash regex或任何您想要的变体:uurity8g3#
这是一个很老的问题,但仍然相关。可以使用https://pdfgrep.org/
例如,在所有PDF中搜索“我的字符串”:
pdfgrep --page-number --ignore-case "My string" *.pdf
8oomwypt4#
PDF文档中的每个字母通常单独设置。因此,您必须将.pdf转换为文本,这将使文本减少到一个简单的流。
我会试试这个:
tr
连接换行符。\+
允许单词之间有1个或多个空格字符。最后,grep -q
只返回基于匹配的退出状态0/1
。它不打印匹配的行。