如何仅获取 pdf 文件中某个图案的页码,无论该图案是否为多行?

如何仅获取 pdf 文件中某个图案的页码,无论该图案是否为多行?

我在 pdf 文件中找到多行图案的页码,方法是如何在 pdf 文件和文本文件中 grep 多行模式?如何在pdf文件中搜索字符串,并找到该字符串出现的每页的物理页码?

$ pdfgrep -Pn '(?s)image\s+?not\s+?available'  main_text.pdf 
49: image
   not
available
51: image
   not
available
53: image
   not
available
54: image
   not
available
55: image
   not
available

我只想提取页码,但因为模式是多行的,所以我得到

$ pdfgrep -Pn '(?s)image\s+?not\s+?available'  main_text.pdf | awk -F":" '{print $1}'
49
   not
available
51
   not
available
53
   not
available
54
   not
available
55
   not
available

代替

49
51
53
54
55

我想知道如何仅提取页码,而不管模式是否是多行的?谢谢。

答案1

这有点 hacky,但由于您已经使用了 perl 兼容的 RE,您可以使用\K“keep left”修饰符来匹配表达式中的所有内容(以及下一行结束之前的任何其他内容),但将其从输出中排除:

pdfgrep -Pn '(?s)image\s+?not\s+?available.*?$\K'  main_text.pdf

然而,输出仍将包含:分隔符。

答案2

添加$0~":"为 awk 识别器。即,您得到以下行:

 .... | awk -F":" '$0~":"{print $1}'

这样,只有当输入行中有“:”时才会打印输出,其他行将被丢弃。

相关内容