Aqui está um sed um que lhe dará um comportamento semelhante a grep em várias linhas:
sed -n '/foo/{:start /bar/!{N;b start};/your_regex/p}' your_file
Como funciona
-
-nsuprime o comportamento padrão de imprimir todas as linhas -
/foo/{}instrui para corresponderfooe fazer o que vem dentro do squigglies para as linhas correspondentes. Substituafoopela parte inicial do padrão. -
:starté um rótulo de ramificação para nos ajudar a manter o loop até encontrarmos o fim do nosso regex. -
/bar/!{}executará o que está no squigglies para as linhas que não correspondem abar. Substituabarpela parte final do padrão. -
Nacrescenta a próxima linha ao buffer ativo (sedchama isso de espaço padrão) -
b startramificará incondicionalmente para o rótulostartque criamos anteriormente, para continuar anexando a próxima linha, desde que o espaço padrão não contenhabar. -
/your_regex/pimprime o espaço do padrão se corresponder ayour_regex. Você deve substituiryour_regexpela expressão inteira que deseja corresponder em várias linhas.