我有一个文件:
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
)使其在两种情况下都显式匹配最后一行,因此不会触发问题/功能。