Seu uso de \s
na regex significa que a expressão pode incluir novas linhas. Eu não estou familiarizado o suficiente com a forma como o -v
é implementado no pcregrep para saber por que não é o inverso, mas tenho certeza que essa é a causa.
Se você alterar seu arquivo para:
apple
banana starts matching
this line should match
this too
and this
mango
pomelo
Então, mesmo sem o -v
, a correspondência parece que não é o que você pretende.
$ pcregrep -M 'banana.*\n(\s.*\n)*' fruits.txt
banana starts matching
this line should match
this too
and this
mango
pomelo
Se for realmente apenas um espaço no início da linha que deve corresponder, sugiro alterar o \s
para um ou mais espaços " +"
.
Quando eu mudo o regex para 'banana.*\n( +.*\n)*'
Ele combina (regular e inverso) de uma maneira que eu acho mais correta. Talvez use [ \t]+
se as guias também forem permitidas.