Negar expressões regulares não é fácil. Você pode usar lookbehinds negativos :
$ grep -C4 -P '(?<!call).*fn1' test.txt
5-even more main code
6-call fn2
7-still more main code
8-
9:function fn1
10-call fn3
11-fn1 code
12-more fn1 code
Este grep
usa expressões regulares no estilo Perl ( -P
) para procurar por qualquer instância de fun
não precedida por call
. E você pode combinar -A4 -B4
para obter -C4
.