grep invert search with context

Viewed 21345

I want to filter out several lines before and after a matching line in a file.

This will remove the line that I don't want:

$ grep -v "line that i don't want"

And this will print the 2 lines before and after the line I don't want:

$ grep -C 2 "line that i don't want"

But when I combine them it does not filter out the 2 lines before and after the line I don't want:

# does not remove 2 lines before and after the line I don't want:
$ grep -v -C 2 "line that i don't want"   

How do I filter out not just the line I don't want, but also the lines before and after it? I'm guessing sed would be better for this...

Edit: I know this could be done in a few lines of awk/Perl/Python/Ruby/etc, but I want to know if there is a succinct one-liner I could run from the command line.

6 Answers

2019 Solution

This is a simple solution, found elsewhere:

grep --invert-match "test*"

Selects all not matching "test*". Super useful and easy to remember!

(Edit)

This doesn't completely answer the original question and returns the entire set of lines not matching.

Related