pcregrep 是如何工作的?

pcregrep 是如何工作的?

我有一个文件:

This error
-this
-this
-that
[text I want]
This error
-asd
-asfag
-adsfhs
[text I want]
[text I want]
This error
-asdgsda
-asdgg
-gasdg

我想匹配除了This error and next three lines,我可以使用:

pcregrep -vM  'This error\n.*\n.*\n' file

它给出输出:

[text I want]
[text I want]
[text I want]

但是,如果我想使用相同的命令(通过删除v)匹配它们,而不是删除它们:

pcregrep -M  'This error\n.*\n.*\n' file

它给出输出:

This error
-this
-this
This error
-asd
-asfag
This error
-asdgsda
-asdgg

pcregrep那么实际效果如何呢?

答案1

添加.*到正则表达式的末尾。

pcregrep -M  'This error\n.*\n.*\n.*' file
pcregrep -vM 'This error\n.*\n.*\n.*' file

我不知道这是否是由于错误造成的,但它似乎-v也排除了最后一个匹配之后的整行\n,但没有-v它则不会。因此,添加.*(即不以 结尾正则表达式\n)使其在两种情况下都显式匹配最后一行,因此不会触发问题/功能。

相关内容