如果我使用两个连续的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
,2013
和foo
.
grep --color=always ID file | grep 2013 | grep foo
会着色ID
和foo
,但不会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
采取三个选择:never
,auto
和always
。前两个应该是唯一考虑的GREP_OPTIONS
。
GREP_COLORS
您也可以在man
页面或以下位置查看gnu grep。