加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

grep 多行 正则匹配

发布时间:2020-12-14 06:18:35 所属栏目:百科 来源:网络整理
导读:https://stackoverflow.com/questions/2686147/how-to-find-patterns-across-multiple-lines-using-grep ? I relied heavily on pcregrep,but with newer grep you do not need to install pcregrep for many of its features. Just use? grep -P . In the e

https://stackoverflow.com/questions/2686147/how-to-find-patterns-across-multiple-lines-using-grep

?

I relied heavily on pcregrep,but with newer grep you do not need to install pcregrep for many of its features. Just use?grep -P.

In the example of the OP‘s question,I think the following options work nicely,with the second best matching how I understand the question:

grep -Pzo "abc(.|n)*efg" /tmp/tes* grep -Pzl "abc(.|n)*efg" /tmp/tes*

I copied the text as /tmp/test1 and deleted the ‘g‘ and saved as /tmp/test2. Here is the output showing that the first shows the matched string and the second shows only the filename (typical -o is to show match and typical -l is to show only filename). Note that the ‘z‘ is necessary for multiline and the ‘(.|n)‘ means to match either ‘anything other than newline‘ or ‘newline‘ - i.e. anything:

[email?protected]:~$ grep -Pzo "abc(.|n)*efg" /tmp/tes* /tmp/test1:abc blah blah blah.. blah blah.. blah blah.. blah efg [email?protected]:~$ grep -Pzl "abc(.|n)*efg" /tmp/tes* /tmp/test1

To determine if your version is new enough,run?man grep?and see if something similar to this appears near the top:

 -P, --perl-regexp Interpret PATTERN as a Perl regular expression (PCRE, see below). This is highly experimental and grep -P may warn of unimplemented features.

That is from GNU grep 2.10.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读