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