Tell me more ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I use the --colour option of grep a lot, but I often use less as well. How can I pipe grep results to less and still preserve the coloring. (Or is that possible?)

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

EDIT:

I'm looking for a direct solution or anything equivalent to this.

share|improve this question

3 Answers

up vote 50 down vote accepted

When you simply run grep --color it implies grep --color=auto which detects whether the output is a terminal and if so enables colors. However, when it detects a pipe it disables coloring. The following command:

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

Will always enable coloring and override the automatic detection, and you will get the color highlighting in less.

EDIT: Although using just less works for me, perhaps older version require the -R flag to handle colors, as therefromhere suggested.

share|improve this answer
20  
You need to use less -R for the colour encoding to be interpreted by less correctly – therefromhere Sep 4 '09 at 23:24
It worked for me with just less, it may be version dependent. – spatz Sep 5 '09 at 12:14
wow. I thought 'auto' only depended on the terminal type. I may be jumping the gun, but this may revolutionize the way I use linux :P – Jeremy Powell Sep 8 '09 at 14:16
Awesome. Though I too to use less -R to get less to display colours, rather than the colouring escape codes :o) – Owen Blacker Mar 6 '12 at 15:05
1  
A (hopefully) useful addendum: I needed to exclude some matches but maintain the colouring, so I actually ended up with grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R, which met my needs perfectly. (Thanks again!) – Owen Blacker Mar 6 '12 at 15:35

You can put this in your .bashrc file:

export GREP_OPTIONS="--color=always"

or create an alias like this:

alias grepc="grep --color=always"

and you will need to use the -R option for less, as pointed out by therefromhere

share|improve this answer
4  
Warning!: GREP_OPTIONS="--color=always" may break many scripts that use grep (or (e|f)grep). – mctylr Mar 12 '10 at 19:25
Yeah, better to just alias grep. You can always get pure grep with GREP, or override the --color option manually. – asmeurer Jul 18 '11 at 22:51

Don't alias "grep", better to alias "less" which is never used by shells. In your .bashrc just put: alias less="less -r".

share|improve this answer
Not quite right. One needs to use both grep --color=always and less -R. Note that grep only knows it is being piped into some other process and the --color=auto option uses solely this information to decide if will output colors or not. – brandizzi Apr 17 at 18:35

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.