我知道这种类型的搜索已经在其他几个问题中得到了解决,但由于某些原因我无法在我的场景中使用它。
我有一个文本文件,其中包含类似于以下模式的内容:
some text here done
12345678_123456 226-
more text
some more text here done
12345678_234567 226-
我试图在下一行找到done
跟226-
后面的所有案例,其中16个字符正在进行中。我试过了grep -Pzo
和pcregrep -M
,但都没有回复。
我尝试了多种正则表达式组合来考虑中间的2行和16个字符。这是我尝试使用grep
:
grep -Pzo '(?s)done\n.\{16\}226-' filename
相关帖子:
答案 0 :(得分:1)
将其概括为此(?m)done$\s+.*226-$
因为在字符串末尾226-之后需要\n
是件坏事
并且在226之后不需要\n
也是一件坏事
因此,悖论是用(\n|$)
解决的,但为什么\n
呢?
多线和$。
解决了这两个问题答案 1 :(得分:0)
在{
中使用}
(PCRE)选项时,您不得逃避-P
和grep
。逃跑只适用于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