
Допустим, у меня есть текстовый файл с таким содержимым:
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