Usando GNU grep
com -P
opção:
$ grep PATTERN file | grep -P '^[^#]*\KPATTERN|^'
aaa PATTERN
bbb ccc PATTERN ddd
# eee PATTERN
\K
faz com que todas as coisas à esquerda de PATTERN
não sejam incluídas na string correspondente. Esta solução assume que seu grep
está com alias para grep --color=auto