我在 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}'
这样,只有当输入行中有“:”时才会打印输出,其他行将被丢弃。