Grep: muestra solo la segunda línea arriba

Grep: muestra solo la segunda línea arriba

Digamos que tengo un archivo de texto con el contenido:

foo
bar
whatever

something I don't know
bar2
whatever

Y, como resultado de hacer grep whatever myfile.txt(y/o sedy/o awk), me gustaría tener:

foo
something I don't know

Intenté usar la opción -B 2pero eso genera ambos fooy bar.
No puedo hacerlo ... | grep -v barporque hay muchos registros diferentes.

Respuesta1

No grep, pero debería funcionar:

awk '/grep_string/ {imprimir a} {a=b;b=$0}' archivo

Respuesta2

Así que aquí está mi solución ya que no pude encontrar ninguna manera de hacerlo:

Mientras me devolvían bloques de contenido, diga:

foo
bar
whatever
--
foo2
bar2
whatever
--

y así sucesivamente, utilicé el separador de grep y obtuve la siguiente línea así y luego las eliminé:

grep -B2 whatever myfile.txt | grep -v whatever | grep -A 1 -E '\-\-' | grep -v  -E '\-\-'

Y eso solo produce:

foo
foo2

información relacionada