如何使用 grep 输入保留颜色代码?

如何使用 grep 输入保留颜色代码?

如果我使用两个连续的grep命令,例如:

echo "foo bar" | grep foo | grep bar

那么第一个模式(“foo”)不会突出显示。事实上,grep 似乎从其输入中删除了颜色代码。有什么办法可以防止这种情况发生吗?

答案1

使用--color=always

grep检测输出是否到管道(或文件)。当输出到文件时,您最不需要颜色 - 因为这是终端的转义序列。通常:

foo ^[[01;31m^[[Kbar^[[m^[[K

来自例如:

grep pattern file > result

要覆盖使用--color=always.

grep --color=always pattern file | ...

例子:

有文件:

ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz

然后

grep --color=always ID file | grep --color=always 2013 | grep foo

会颜色ID,2013foo.

grep --color=always ID file | grep 2013 | grep foo

会着色IDfoo,但不会2013

1重要:您还必须记住添加的杂乱从颜色传递到链中的下一个命令。一旦 ID 被着色,您就不能(轻松地)匹配例如ID=111


在某些情况下,人们可能想要终端颜色在文件中。尝试例如

 grep --color=always foo file > result
 cat result

尽管生成的文件的可移植性非常有限。


着色本身也是一种延伸。


正如好人所说@slm,您可以添加:

export GREP_OPTIONS="--color=always"

给你的.bashrc等等,但不要除非你出于某种原因真正理解其中的含义并且仍然想这样做。grep由于上述事实1,它会在很多方面被破坏。

alias如果您经常使用它,请添加一个。

 alias cgrep='grep --color=always'

GREP_OPTIONS--color 采取三个选择neverautoalways。前两个应该是唯一考虑的GREP_OPTIONS

GREP_COLORS您也可以在man页面或以下位置查看gnu grep

相关内容