2010-02-24 119 views
103

Preserve ls colouring after grep’ing有一個類似的問題,但它讓我很煩惱,如果你將着色的grep輸出到另一個grep中,而着色不被保留。管道grep grep後保留着色

作爲示例,grep --color WORD * | grep -v AVOID不保留第一個輸出的顏色。但是對我來說ls | grep FILE確實保持顏色,爲什麼不同?

+2

這個問題似乎是題外話,因爲它是關於Unix命令的用法,屬於http://unix.stackexchange.com – Raptor 2014-06-04 07:02:05

回答

116

grep有時會禁用顏色輸出,例如寫入管道時。您可以覆蓋與grep --color=always

這種行爲的正確的命令行是

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

這是相當冗長,或者你可以添加一行

alias cgrep="grep --color=always" 

.bashrc例如和使用作爲彩色grep的cgrep。重新定義grep時,可能會遇到依賴於grep的特定輸出並且不喜歡ascii轉義代碼的腳本的麻煩。

+1

該解決方案只在某些情況下,幸運的作品。請參閱下面的andersonvom的答案。 – studog 2018-01-30 15:09:41

62

一句忠告:

當使用grep --color=always,實際的琴絃被下一個管通過將被改變。這可能會導致以下情況:

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

即使選項-ve '12'應排除中間線,也不會因爲有12之間的顏色特徵。

+0

grep沒有解決方法,對不對? – 2015-02-18 18:29:24

+0

如果你使用'--color = auto',那麼它應該選擇你在其他地方管道並完全抑制顏色的事實,但它有點挫敗了目的。如果你仍然想要彩色結果,我想你可以在最後一個使用'--color'的管道再次grep它。 – andersonvom 2015-02-18 18:38:21

+1

在Mac OS X上,至少,在@andersonvom的最後一個管道着色不起作用。不知道爲什麼;也許它正在着色排除的模式? '--color = always'確實起作用,我假設,上述注意事項。 – user766353 2015-02-25 23:45:12

3

儘管有點'hack-ish',它也可以在管道末尾重複grep命令。
grep WORD * | grep -v AVOID | grep WORD