題 Less和Grep:使用從grep到更少的管道時獲得彩色結果


我經常使用grep的--colour選項,但我經常使用較少的。如何將grep結果輸送到更少並仍保留著色。 (或者可能嗎?)

grep "search-string" -R * --colour | less 

編輯

我正在尋找直接的解決方案或任何與此相當的東西。


216
2017-09-04 21:46


起源


可能重複 在'less''命令中獲取顏色 - Ciro Santilli 新疆改造中心 六四事件 法轮功


答案:


當你簡單地跑 grep --color 它意味著 grep --color=auto 檢測輸出是否是終端,如果是,則啟用顏色。但是,當它檢測到管道時,它會禁用著色。以下命令:

grep --color=always -R "search string" * | less

將始終啟用著色並覆蓋自動檢測,您將獲得突出顯示的顏色 less

編輯: 雖然只使用 less 適合我,也許舊版本需要 -R 標誌處理顏色,如其他人所建議的那樣。


247
2017-09-04 22:35



你需要使用 less -R 因為顏色編碼的解釋不太正確 - therefromhere
它對我有用 less,它可能是版本相關的。 - drrlvn
一個(希望)有用的附錄:我需要排除一些匹配但保持著色,所以我實際上最終得到了 grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R,完美地滿足了我的需求。 (再次感謝!) - Owen Blacker
我無法相信他們只是實現了顏色處理功能 less 因此錯過了有特殊的機會 colorless 工具。僅僅這個名字應該已經完成了!我應該編寫一個補丁,當二進製文件運行時自動調用-R colorless。 - Christian
@OwenBlacker它可能不是別名。你可能有 $LESS 設置 -R。 - greyfade


你可以把它放在你的 .bashrc 文件:

export GREP_OPTIONS="--color=always"

或者創建一個這樣的別名:

alias grepc="grep --color=always"

你將需要使用 -R 選項 less,正如其中所指出的那樣


27
2017-09-05 10:46



警告!:GREP_OPTIONS =“ - color = always”可能會中斷 許多 使用grep(或(e | f)grep)的腳本。 - mctylr
是的,更好的是別名grep。你總能變得純潔 grep 同 GREP,或覆蓋 --color 選項手動。 - asmeurer
這對我不起作用,別名確實有效。 - saeedgnu


在這種情況下,我更喜歡實際創建小sh文件並將它們打開 /usr/local/bin
我經常使用 grep 以遞歸的方式 pwd,這就是我的個人腳本:

#!/bin/sh
grep --color=always -r "$@" . | less -R

然後我就把它複製成了 /usr/local/bin/g (是的,我經常使用它)


4
2017-09-30 21:48



為什麼不直接使用shell函數呢? g() { grep --color=always -r "$@" . | less -R } 工作方式相同,可能會給予(微小)更好的表現。 - 00dani


不要別名“grep”,最好別名為“less”,這是shell永遠不會使用的。在你的 .bashrc 剛放: alias less="less -r"


1
2018-01-20 10:28



不太對勁。一個人需要使用 都  grep --color=always 和 less -R。請注意,grep只知道它被傳送到其他進程和 --color=auto 選項僅使用此信息來決定是否輸出顏色。 - brandizzi
注意 less 選項 -r 不同於 -R。大概 -R 更安全。 - Craig McQueen
那麼為什麼要低估我的解決方案呢? OP專門要求 less 示例已經使用`--color'選項。 - not2qubit
別名在這裡可能是不受歡迎的。 less 支持一個 $LESS 環境變量。所以,而不是別名, export LESS='-R' 可能更可取。 - greyfade


我需要跑

grep --color=always -R "search string" * | less - r

隨著 -r 之後的旗幟 ,為了這個運行。


0
2018-01-18 10:51