Por padrão, grep lê e processa linhas únicas.
Nas versões mais recentes de grep , você pode usar a opção -z para dizer a ela para considerar sua entrada como nula separada em vez de separada por nova linha; já que sua entrada não tem terminações nulas, é essencialmente equivalente ao modo 'slurp' do perl. Então você poderia fazer
$ grep -zPo '{[^}]*}' testttt
{It captures this! }
{
It can't
capture this!!! why?
}
ou, mais apropriadamente, usando uma correspondência .*? não-gananciosa com (?s) para incluir novas linhas em .
$ grep -zPo '(?s){.*?}' testttt
{It captures this! }
{
It can't
capture this!!! why?
}
Como alternativa, se pcregrep estiver disponível,
$ pcregrep -Mo '(?s){.*?}' testttt
{It captures this! }
{
It can't
capture this!!! why?
}