pipe道grep grep后保留着色

在grep'ing之后Preserve ls着色中有一个类似的问题,但是它让我感到困惑 ,如果你将grep输出的颜色输出到另一个grep中,那么着色不会被保留。

作为一个例子grep --color WORD * | grep -v AVOID grep --color WORD * | grep -v AVOID不保留第一个输出的颜色。 但是对我来说ls | grep FILE ls | grep FILE做保持颜色,为什么不同?

grep有时会禁用颜色输出,例如在写入pipe道时。 你可以用grep --color=always覆盖这个行为

正确的命令行将是

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

这是相当详细的,或者你可以添加行

 alias cgrep="grep --color=always" 

以你的.bashrc为例,并使用cgrep作为彩色grep。 当重新定义grep ,可能会遇到依赖grep特定输出的脚本的麻烦,而不喜欢ascii转义代码。

一个build议的话:

当使用grep --color=always ,被传递到下一个pipe道的实际string将被改变。 这可能导致以下情况:

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

尽pipe选项-ve '12'应排除中间线,但不会因为在12之间有颜色字符。

尽pipe有点“hack-ish”,但它也可以简单地在pipe道末尾重复grep命令。
grep WORD * | grep -v AVOID | grep WORD