grep 多行 正则匹配
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? 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? -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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |