As pointed by @Joni you need to replace 'always' with 'auto', which will highlight matching strings if (and only if) the output is written directly to the terminal and that terminal is capable of displaying coloured output. Otherwise it will not trash the output with messy characters.
However, a nicer way to make that behaviour default would be to put into your .bash_profile
(or .bashrc
, or whereever you keep your custom settings):
# grep auto colouring
my_grep_options=(--colour=auto)
alias grep='grep $my_grep_options'
which will always replace your grep call with its preprepared version, so whenever you type:
grep
it will be replaced by:
grep --colour=auto