2011-06-10 16 views
2

我想將命令的輸出傳遞給能夠爲特定單詞的出現添加顏色的內容。如何用管道添加顏色?

例如:echo「ABC DEF GHI」| magic_color_thing(「DEF」)應打印出ABC DEF GHIDEF着色。

我想用ZSH來做,我想保留所有行以及回車。

非常感謝您的幫助!

回答

3

是否

echo "...... DEF....." | grep --color "DEF" 

爲你做的工作嗎?

如果你說更多關於你在用管道把各種數據這將有助於。

(而且沒有比賽線路也是否重要與否)

+0

謝謝,但grep將只輸出匹配的行(我編輯的問題更精確)。 輸入是另一個命令的輸出,它可以是'echo','cat'或其他任何東西。 – Ale 2011-06-10 08:29:11

+0

在那種情況下,我似乎記得一個名爲'supercat'的小應用程序http://supercat.nosredna.net/記錄不完善,因爲您必須閱讀配置文件才能理解它,但它應該按照您的要求進行操作。另一種方法是使用sed或awk在您希望突出顯示的文本週圍插入ANSI顏色代碼。 – benosteen 2011-06-10 08:35:52

+0

可能不公平的給你留下一個「只用'sed'一次性提及 - > $ echo」....... foo ...「| sed's/foo/ESC [33mfooESC [0m/g'(其中ESC爲字符代碼27:按Ctrl-V,然後按退出鍵)。請參閱http://pueblo.sourceforge.net/doc/manual/ansi_color_codes。 HTML的顏色列表。 – benosteen 2011-06-10 08:49:23

4

如果你有(最近的版本) GNU grep,請使用其--color選項。要讓它打印不匹配的行,請使用與空字符串匹配的模式。

… | grep --color -E '|DEF' 

如果你想這樣做完全在zsh中,使其遍歷線,周邊與DEF顏色代碼。

autoload colors; colors 
while IFS= read -r line; do 
    print -r -- "${line//DEF/$fg[red]DEF$fg[default]}" 
done 

又見How to have tail -f show colored output,和其他幾個questions tagged color