Text-Processing

無論模式是否為多行,如何僅獲取 pdf 文件中模式的頁碼?

  • July 22, 2018

我在 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

我想知道如何只提取頁碼,不管模式是否是多行的?謝謝。

這有點 hacky,但由於您已經在使用與 perl 兼容的 RE,您可以使用\K“keep left”修飾符來匹配表達式中的所有內容(以及直到下一行結束的任何其他內容),但將其從輸出中排除:

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

但是,輸出仍將包含:分隔符。

添加$0~":"為 awk 辨識器。即,你得到了這條線:

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

這樣,只有當輸入行中有“:”時才會列印輸出,而其他行則被丟棄。

引用自:https://unix.stackexchange.com/questions/457844