Se você tem o GNU grep, você pode usar expressões regulares Perl , que têm um construção de negação .
grep -A1 -P '^(?!.*ignore me).*needle'
Se você não tem o GNU grep, você pode emula suas opções de contexto antes / depois no awk .
awk -v after=3 -v before=2 '
/needle/ && !/ignore me/ {
for (i in h) {
print h[i];
delete h[i];
}
until = NR + after;
}
{
if (NR <= until) print $0; else h[NR] = $0;
delete h[NR-before];
}
END {exit !until}
'