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
-
-n
suprime o comportamento padrão de imprimir todas as linhas -
/foo/{}
instrui para corresponderfoo
e fazer o que vem dentro do squigglies para as linhas correspondentes. Substituafoo
pela 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
. Substituabar
pela parte final do padrão. -
N
acrescenta a próxima linha ao buffer ativo (sed
chama isso de espaço padrão) -
b start
ramificará incondicionalmente para o rótulostart
que criamos anteriormente, para continuar anexando a próxima linha, desde que o espaço padrão não contenhabar
. -
/your_regex/p
imprime o espaço do padrão se corresponder ayour_regex
. Você deve substituiryour_regex
pela expressão inteira que deseja corresponder em várias linhas.