Com grep, desejo selecionar todas as linhas que correspondam a um padrão e que não correspondam a outro padrão. Quero poder usar uma única invocação de greppara poder usar a --after-contextopção (ou --before-context, ou --context).
-vnão é viável aqui, pois nega todos os padrões que passo ao grepusar a -eopção
Exemplo
Quero procurar linhas correspondentes needle, ignorando as linhas correspondentes ignore me, com uma linha do seguinte contexto.
Aqui está o meu arquivo de entrada:
one needle ignore me
two
three
four needle
five
A saída que eu quero é:
four needle
five
Como você pode ver, esta solução ingênua não funciona:
$ cat file | grep --after-context=1 needle | grep -v 'ignore me'
two
---
four needle
five
ack