grepしたときにキーワードに色をつけることが可能。だけど、パイプでlessにリダイレクトすると色が消えてしまう。この理由はgrepのデフォルトでは--color=autoとなっているから。-color=autoの場合針だ入れ句があった場合に色付けを抑制据える。この挙動は不思議なことではなく、リダイレクト先に何が待っているかわからないので安全策をとろうということ。でもリダイレクト先に色付けようのエスケープシーケンスを理解するプログラムが待っている場合は、そのまま色付けして欲しい。これが今回のgrep|lessで色が消えるという問題。これを解決するには、grepに強制的に色つき出力させて、lessは色付けの背うケープシーケンスを理解させるようにしてリダイレクトを受けるようにすればよい。ということで今回の回答は下。このようにすればデフォルトでは赤い文字で色付けして表示される。
$ grep -e 'hoge' --color=always hoga.txt | less -R
lsもlessを通すと色分けが解除されるけれど、--colorオプションを付けれは強制的に色づけ可能。
$ ls --color | less -R
間違えて、less -Rではなくlessした場合だとESCという文字列が表示されてしまう。この場合はlessにパイプされた状態で-r + Enterでカラー表示、戻すにはもう一回-r + Enter。
問題は、grepの色分けはすべてのキーワードで同じ色が付いてしまうこと。これは調べねば。