Isso ocorre porque o padrão de correspondência .*
é o que é conhecido como correspondência desejada , o que significa que ele retornará a sequência maior para corresponder ao seu padrão de pesquisa. / p>
O que você gostaria de fazer é usar uma correspondência não voraz (ou preguiçoso ), que retorna a string menor para corresponder seu padrão. Você pode fazer isso alterando sua correspondência desejada de .*
para .*?
. No entanto, grep
normalmente não suporta isso por padrão, mas você pode habilitar isso usando a opção -P
que permite a correspondência de expressão regular perl.
Em suma, você pode alterar seu comando grep para grep -o -P '(?<=<p>).*?(?=</p>)'
.
Mais detalhes sobre essa resposta podem ser encontrados no link