Grep: показать только 2-ю строку выше

Grep: показать только 2-ю строку выше

Допустим, у меня есть текстовый файл с таким содержимым:

foo
bar
whatever

something I don't know
bar2
whatever

И, как результат выполнения grep whatever myfile.txt(и/или sedи/или awk), я хотел бы иметь:

foo
something I don't know

Я пробовал использовать option -B 2, но он выводит fooи bar.
Не могу сделать, ... | grep -v barтак как есть много разных записей.

решение1

Не grep, но должно работать:

awk '/grep_string/ {print a} {a=b;b=$0}' файл

решение2

Итак, вот мое решение, поскольку я не смог найти другого способа сделать это:

Когда мне вернули блоки контента, скажите:

foo
bar
whatever
--
foo2
bar2
whatever
--

и так далее, я использовал разделитель grep и получил следующую строку, вот так, а затем удалил их:

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

И это просто выводит:

foo
foo2

Связанный контент