Eu recomendo evitar a variável de ambiente GREP_OPTIONS, isso afetará todas as invocações do grep, mesmo aquelas incorporadas em outras ferramentas. Se essas ferramentas esperam que o grep se comporte de um jeito, e você mude esse comportamento, ele irá quebrar essas ferramentas.
Em vez disso, você pode criar um alias, o que funciona bem. Isso só afetará as chamadas para o grep do seu shell interativo (ou seja, você digita a si mesmo).
A opção final, que eu mais gosto de tudo, é criar um script wrapper que invoque o grep. Eu prefiro isso sobre um alias, porque eu posso invocar este wrapper de outros programas. Por exemplo. no vim definindo vimgrep, para que minhas pesquisas de dentro do vim se comportem de maneira idêntica às pesquisas na linha de comando.
$ cat 'which grp'
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*
Invoque isso usando:
$ grp pattern dir
por exemplo,
$ grp pattern .
pesquisará instâncias de 'padrão' em todos os arquivos de texto no diretório e subdiretórios atuais.
Note que eu chamo meu script 'grp', em vez de sombrear 'grep', de modo que eu esteja sempre ciente se estou invocando o grep com meus padrões personalizados ou não.
Por padrão, incluo:
-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files
Acho que todos iriam pular os diretórios de controle de origem: .hg .git .bzr .svn
Ignorar 'build' e 'dist' são Python-isms e provavelmente não se aplicam à maioria das pessoas. Sem dúvida, você desenvolverá suas próprias idiossincrasias enquanto trabalha.
'tags' é a saída de ctags, que eu uso para 'vá para definição de função' e coisas do tipo em ferramentas como vim. Como tal, ele contém pelo menos uma cópia de cada palavra e símbolo do meu código-fonte, por isso vale a pena pular de seus resultados de pesquisa.
"$ *" no final é a sintaxe bash para "e todos os outros parâmetros da linha de comando", para que você possa passar o padrão e dir para pesquisar como normal e substituir quaisquer outras flags de linha de comando gostaria.