21

Because I'm lazy.... any time I want to use grep, I want it to be grep -n --colour. Is there a way to permanantly map this?

1
  • 6
    +1 for "Because I'm lazy...". Ever considered a career as a developer? :) Oct 13, 2010 at 17:34

4 Answers 4

33

In your $HOME/.bashrc file, add:

export GREP_OPTIONS="-n --color"

This will work with egrep too and in aliases that use grep.

Update: GREP_OPTIONS is deprecated from grep 2.21 on and if you use this solution you will see the following warning:

grep: warning: GREP_OPTIONS is deprecated; please use an alias or script

The best solution is to therefore follow maco's advice in his answer. Or switch to using ag, which outputs in color by default.

5
  • respect.
    – myusuf3
    Aug 13, 2010 at 16:57
  • 4
    Respect but no upvote, eh? ;-)
    – richq
    Aug 13, 2010 at 17:08
  • 1
    Aliases can be used after a pipe just fine. They just don't recurse.
    – maco
    Aug 13, 2010 at 17:35
  • 1
    Hey hey, I upvoted. I like this better than alias. Aug 13, 2010 at 19:37
  • @marco: you're right (with bash) - I was thinking of csh, where they can't. Oops!
    – richq
    Aug 13, 2010 at 20:45
30

Edit ~/.bash_aliases Add a line that says:

alias grep='grep -n --color'

~/.bash_aliases is automatically included by ~/.bashrc if it exists

2
  • 8
    Or add the line in .profile if you want it to work in all shells not just bash. Aug 13, 2010 at 22:16
  • 2
    this won't work with xargs eg: find /usr/share -name '*.txt' |xargs grep testing
    – rfabbri
    May 27, 2016 at 15:22
2

you can modify the file .bashrc located in your home directory defining an alias, which will override any default setting:

alias grep='grep -n --color'

after the change close and open the terminal again because the file is read only when you open the terminal.

If you take a look on the file .bashrc you will found more default aliases like:

alias ll='ls -l'

alias la='ls -A'

alias l='ls -CF'

1

Create a script in addition to an alias mentioned in the other answers. An alias by itself won't always work, and a script layer is fast enough for human readable output anyways.

Choose a short name, like cgrep:

#!/bin/sh
grep --color -n "$@"

Place it in your path, say ~/bin (if you read UPE this is in your path :). Then stuff like this will work:

find /usr/share -name '*.txt' | xargs cgrep testing

I'm still not so happy, I too wanted grep to always color when stdout to a terminal without selectively typing cgrep.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .