應該不少人有經驗,在使用 grep 時,要搜尋的關鍵字會用顏色 highlight 方便閱讀,例如:
$ ls -lh | grep php
-rw-rw-r-- 1 zero zero 178 Aug 22 19:15 autoload.php
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 cakephp
drwxrwxr-x 5 zero zero 4.0K Aug 22 19:01 phpdocumentor
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 phpoffice
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 phpoption
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 phpseclib
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 phpspec
drwxrwxr-x 8 zero zero 4.0K Aug 22 19:01 phpunit
不過如果因為列表很長,在把搜尋結果 pipe 給 less 以後,顏色就消失了。
這其實是 grep 這邊會判斷 output 到哪一種型態的 I/O,像是後面接的是 bash pipe,grep 就會自動移除 ANSI color 的 syntax,畢竟不知道 pipe 資料給誰,如果後者不支援 ANSI color 就會變成亂碼。
如果很確定 pipe 後面的指令、工具支援 ANSI color 的指令,就可以下參數要求 grep 輸出顏色。例如:
$ ls -lh | grep php --color=always | less
-rw-rw-r-- 1 zero zero 178 Aug 22 19:15 autoload.php
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 cakephp
drwxrwxr-x 5 zero zero 4.0K Aug 22 19:01 phpdocumentor
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 phpoffice
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 phpoption
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 phpseclib
drwxrwxr-x 3 zero zero 4.0K Aug 22 19:01 phpspec
drwxrwxr-x 8 zero zero 4.0K Aug 22 19:01 phpunit