Grep: mostra apenas a 2ª linha acima

Grep: mostra apenas a 2ª linha acima

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 sede/ou awk), eu gostaria de ter:

foo
something I don't know

Eu tentei usar a opção, -B 2mas isso gera ambos fooe bar.
Não é possível fazer ... | grep -v barisso 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

informação relacionada