Não use grep --color=always
, é exatamente por isso que o GNU grep
(e talvez outros) também tem grep --color=auto
, que é equivalente a grep --color
sozinho (de man grep
):
--color[=WHEN], --colour[=WHEN]
Surround the matched (non-empty) strings, matching lines,
context lines, file names, line numbers, byte offsets, and
separators (for fields and groups of context lines) with escape
sequences to display them in color on the terminal. The colors
are defined by the environment variable GREP_COLORS. The
deprecated environment variable GREP_COLOR is still supported,
but its setting does not have priority. WHEN is never, always,
or auto.
Eu não consigo encontrar onde isso está documentado em mais detalhes, mas ele basicamente detecta se a saída de grep
é um arquivo ou um terminal ou um pipe ou qualquer outra coisa e age de acordo:
$ echo foo | grep --color=always o | grep m
f[01;31mo[m[01;31mo[m
$ echo foo | grep --color=always o >outfile; grep m outfile
f[01;31mo[m[01;31mo[m
Compare o acima com
$ echo foo | grep --color o >outfile; grep m outfile
$ echo foo | grep --color o | grep m
$
Portanto, usar a opção auto
basicamente só imprimirá as cores quando você as puder ver. É realmente muito inteligente e funciona como um encanto. Tanto que eu tenho:
$ type grep
grep is aliased to 'grep --color'