在两行上搜索模式时正则表达式的问题

时间:2017-11-03 20:46:32

标签: regex grep

我知道这种类型的搜索已经在其他几个问题中得到了解决,但由于某些原因我无法在我的场景中使用它。
我有一个文本文件,其中包含类似于以下模式的内容:

some text here done
12345678_123456 226-
more text
some more text here done
12345678_234567 226-

我试图在下一行找到done226-后面的所有案例,其中16个字符正在进行中。我试过了grep -Pzopcregrep -M,但都没有回复。

我尝试了多种正则表达式组合来考虑中间的2行和16个字符。这是我尝试使用grep

的示例之一
grep -Pzo '(?s)done\n.\{16\}226-' filename

相关帖子:

2 个答案:

答案 0 :(得分:1)

将其概括为此(?m)done$\s+.*226-$

因为在字符串末尾226-之后需要\n是件坏事 并且在226之后不需要\n也是一件坏事 因此,悖论是用(\n|$)解决的,但为什么\n呢?

多线和$。

解决了这两个问题

https://regex101.com/r/A33cj5/1

答案 1 :(得分:0)

{中使用}(PCRE)选项时,您不得逃避-Pgrep。逃跑只适用于BRE。

您可以使用:

grep -ozP 'done\R.{16}226-\R' file

done
12345678_123456 226-
done
12345678_234567 226-

\R将匹配任何unicode换行符。如果您只处理\n,那么您可以使用:

grep -ozP 'done\n.{16}226-\n' file