Regex 正则表达式忽略换行符和“页面布局”

Regex 正则表达式忽略换行符和“页面布局”,regex,bash,grep,Regex,Bash,Grep,我有一系列可搜索的PDF文件,我经常使用pdfgrep命令同时搜索所有文件中的特定模式。我的正则表达式知识有点有限,我不知道如何处理换行符和页面布局 例如,我想在下面的每个示例中找到模式ignor.{0,10}布局: This is a rather difficult You see, I would like to ignore task that I am trying to page layout and still find the achieve.

我有一系列可搜索的PDF文件,我经常使用pdfgrep命令同时搜索所有文件中的特定模式。我的正则表达式知识有点有限,我不知道如何处理换行符和页面布局

例如,我想在下面的每个示例中找到模式ignor.{0,10}布局:

This is a rather difficult     You see, I would like to ignore
task that I am trying to       page layout and still find the
achieve.                       pattern I am looking for.
在这两个例子中,我希望前两行由

pdfgrep -n "ignor.{0,10}layout" *
但它没有这样做,因为:

中间有一条直线。 在第一个示例中,ignor和layout之间有10多个字符。 在第二个例子中,ignor被切成两半。 是否有一个正则表达式可以完全解决这个问题?

pdfgrep没有将换行符解释为零字节所需的-z标志。您可以使用pdftotext的解决方案,将其转换为文本并将其流式传输到STDOUT,在这里您可以通过管道进行常规grep调用:

这使得无法有效地使用globbing,但您至少可以迭代glob:

for pdf in *.pdf; do echo -n "$pdf:"; pdftotext "$pdf" - | grep -Pzo "(?s)YOUR\s+QUERY"; done

请注意,如果要匹配空格,几乎总是希望在启用-z时使用\s+,它也匹配换行符。有关标志的解释,请参阅。

如果这是您的问题,左侧的线条肯定是我问题的一部分。-z会将word1\nword2翻译成word1word2而不是word1 word2,不是吗?另外,我相信这个解决方案在第二个例子中没有发现ignor?我想这几乎正是我所需要的,我正在努力完成你提交的内容。我所需要的就是用空格替换所有的换行符。可能显示的不仅仅是模式,因为.txt文件只有一行,所以找到模式的唯一方法是知道*.pdf中.for pdf之前和之后的字符;do echo-n$pdf:;pdftotext$pdf-| sed-z的///g;s/\n//g'| grep-Po.{0,20}ignor.{0,10}布局{0,20};回响我的问题解决了,非常感谢!
pdftotext SPECIFIC-FILE.pdf - | grep -Pzo "(?s)YOUR\s+QUERY"
for pdf in *.pdf; do echo -n "$pdf:"; pdftotext "$pdf" - | grep -Pzo "(?s)YOUR\s+QUERY"; done