Respostas:
alias cgrep='grep -nR --color'
Uso:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
Também um dos meus favoritos:
$ pgrep some-hanging-process
listará todos os pids de processos que correspondem ao nome de algum processo pendente que você pode usar na seguinte situação:
$ kill $(pgrep some-hanging-process)
grep
, grep -r
geralmente deve ser preferida, grep -R
pois a primeira não atravessa links simbólicos.
Eu descobri que a melhor maneira de pimp grep é usar ack , que é essencialmente grep recursivo com uma lista de ignorados inteligente (por exemplo, não pesquisa diretórios .svn, ignora arquivos de backup, etc.), destaque de cores dos resultados e regexps perl. É o que você deseja que o grep faça 98,6% do tempo.
Eu configurei isso no meu .bashrc, em vez de redefinir o grep usando um alias:
export GREP_OPTIONS="--color=auto"
Para mim, isso funciona no Linux, MacOSX e FreeBSD.
GREP_OPTIONS
deve ser considerado prejudicial. Eu recomendo usar em seu alias
lugar. Veja aqui: bugs.launchpad.net/ubuntu/+bug/67141
Eu recomendo evitar a variável de ambiente GREP_OPTIONS, ela afetará todas as chamadas do grep, mesmo aquelas incorporadas em outras ferramentas. Se essas ferramentas esperam que o grep se comporte de uma maneira, e você altera esse comportamento, ele quebrará essas ferramentas.
Em vez disso, você pode criar um alias, que funciona bem. Isso afetará apenas as chamadas para grep do seu shell interativo (ou seja, você digita você mesmo).
A opção final, que eu mais gosto, é criar um script de wrapper que invoque grep. Prefiro isso a um alias, porque posso chamar esse wrapper de outros programas. Por exemplo, no vim, definindo vimgrep, para que minhas pesquisas no vim se comportem de forma 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 .
procurará por instâncias de 'padrão' em todos os arquivos de texto no diretório e subdiretórios atual.
Observe que eu chamo meu script de 'grp', em vez de sombrear 'grep', para que eu esteja sempre ciente de estar invocando 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
Eu acho que todo mundo gostaria de pular dirs de controle de origem: .hg .git .bzr .svn
Ignorar 'build' e 'dist' são ismos de Python e provavelmente não se aplica à maioria das pessoas. Sem dúvida, você desenvolverá suas próprias idiossincrasias enquanto trabalha.
'tags' é a saída de ctags, que eu uso para 'go to function definition' e similares em ferramentas como vim. Como ele contém pelo menos uma cópia de cada palavra e símbolo do meu código-fonte, vale a pena pular dos resultados da pesquisa.
"$ *" no final é a sintaxe do bash para "e todos os outros parâmetros da linha de comando", para que você possa passar o padrão e o diretório para pesquisar normalmente e substituir quaisquer outros sinalizadores da linha de comando que desejar .
A --color
opção já foi mencionada várias vezes, mas eu gostaria de acrescentar que é possível configurar a cor na qual as correspondências serão destacadas usando uma variável de ambiente
export GREP_COLOR="1;33"
A cor deve ser codificada usando códigos de cores ANSI, para referência
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
GREP_COLOR
está obsoleto. Use em GREP_COLORS
vez disso.
Como eu não vi nenhum exemplo de como definir cores, aqui está uma configuração simples para o GNU grep:
# turn on colors, natch.
export GREP_OPTIONS="--color=auto"
if [[ $(echotc Co) -ge 256 ]]; then
# 256 color terminals
export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
# everybody else
export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi
Tenha cuidado com GREP_OPTIONS
; não o use para nada além de coisas como --color=auto
isso, pois isso atrapalhará os scripts que usam grep no seu sistema.