Como posso destacar as correspondências usando o GNU grep?

18

Eu vi em algum Linux, que grep está configurado para destacar a correspondência e imprimir o arquivo correspondente.

Como posso configurar o grep para destacar correspondências?

    
por elmarco 10.08.2010 / 21:57

6 respostas

10
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 alguns processos pendentes que você pode usar na seguinte situação:

$ kill $(pgrep some-hanging-process)
    
por 10.08.2010 / 22:00
19

Descobri que a melhor maneira de manipular o 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.), realce de cor de resultados e regexps perl. É o que você quer que o grep faça 98.6% do tempo.

    
por 10.08.2010 / 23:30
7

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 & FreeBSD.

    
por 10.08.2010 / 23:37
3

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.

    
por 04.10.2011 / 13:28
2

A opção --color já foi mencionada várias vezes, mas 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
    
por 15.09.2010 / 18:34
2

Como não vi nenhum exemplo de configuração de 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 use para nada além de coisas como --color=auto ou ele vai bagunçar qualquer script que use grep no seu sistema.

    
por 08.09.2012 / 05:21

Tags