Preserve colouring after piping grep to grep

A word of advice:

When using grep --color=always, the actual strings being passed on to the next pipe will be changed. This can lead to the following situation:

$ grep --color=always -e '1' * | grep -ve '12'
11
12
13

Even though the option -ve '12' should exclude the middle line, it will not because there are color characters between 1 and 2.


grep sometimes disables the color output, for example when writing to a pipe. You can override this behavior with grep --color=always

The correct command line would be

grep --color=always WORD * | grep -v AVOID

This is pretty verbose, alternatively you can just add the line

alias cgrep="grep --color=always"

to your .bashrc for example and use cgrep as the colored grep. When redefining grep you might run into trouble with scripts which rely on specific output of grep and don't like ascii escape code.