
Digamos que eu tenha um arquivo de texto com o conteúdo:
foo
bar
whatever
something I don't know
bar2
whatever
E, como resultado de fazer grep whatever myfile.txt
(e/ou sed
e/ou awk
), eu gostaria de ter:
foo
something I don't know
Eu tentei usar a opção, -B 2
mas isso gera ambos foo
e bar
.
Não é possível fazer ... | grep -v bar
isso porque há muitos registros diferentes.
Responder1
Não é grep, mas deve funcionar:
awk '/grep_string/ {imprimir a} {a=b;b=$0}' arquivo
Responder2
Então aqui está minha solução, pois não consegui encontrar nenhuma maneira de fazer isso:
Enquanto eu estava sendo devolvido com blocos de conteúdo, diga:
foo
bar
whatever
--
foo2
bar2
whatever
--
e assim por diante, usei o separador do grep e peguei a próxima linha assim e depois os removi:
grep -B2 whatever myfile.txt | grep -v whatever | grep -A 1 -E '\-\-' | grep -v -E '\-\-'
E isso apenas resulta:
foo
foo2