Use cores diferentes para cada outro grep

6

Como posso configurar grep para que eu possa destacar em cores mais inteligentes? Usando cores diferentes?

Problema: grep --color usa o padrão vermelho para realçar correspondências, mas ainda é difícil de ler para execuções consecutivas. Se eu executar grep três vezes, gostaria que a primeira execução usasse vermelho, a segunda para usar outra cor (digamos, verde), a terceira para usar vermelho novamente e assim por diante.

Eu li antes que houvesse um hack para trocar a cor no terminal, use cada outra execução, para que a saída fique limpa e mais fácil de ler. Mas eu esqueço o que é isso; é zsh ou bash-script, ou algum outro shell?

    
por Dennis C 15.11.2013 / 08:59

4 respostas

3

Você pode adicionar o seguinte ao seu arquivo .bashrc :

my_grep() {
  if $GREP_USE_FIRST_COLOR
  then
    export GREP_USE_FIRST_COLOR=false
    export GREP_COLORS='ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'
  else
    export GREP_USE_FIRST_COLOR=true
    export GREP_COLORS='ms=01;33:mc=01;33:sl=:cx=:fn=35:ln=32:bn=32:se=36'
  fi
  grep --color=auto "$@"
}
alias grep=my_grep

Isso alterará a correspondência da cor de realce das chamadas grep subsequentes em um shell interativo entre negrito vermelho ( ms=01;31 ) e negrito amarelo ( ms=01;33 ).

Consulte o manual do grep para obter mais informações sobre como para usar GREP_COLORS para definir as cores de realce específicas que você gosta.

    
por 18.11.2013 / 16:05
0

Inspirado pela resposta do @Chriki

Usando PROMPT_COMMAND como um gancho e atualize a configuração GREP_COLOR e git para cada prompt.

# .bashrc
# ...
# your alias, git prompt, git completetion, exports... etc
# ...
__grep_swap_color ()
{
  if [ -z "$GREP_COLOR" ]
  then
    export GREP_COLOR='1;32'
    git config --global color.grep.match blue
  else
    export GREP_COLOR=''
    git config --global color.grep.match red
  fi
}
PROMPT_COMMAND=$PROMPT_COMMAND';__grep_swap_color'
# End of file
    
por 19.11.2013 / 02:20
0

Você está procurando uma maneira simples de colorir linhas de saída alternativas no bash .

Se a resposta parecer um pouco confusa, siga isto.

  1. Você precisa usar um script que faça isso automaticamente para você. Abra o "terminal". (Em muitas variações do Ubuntu e em si, você pressiona Alt + Ctrl + T para invocar isso.) Suponho que você esteja usando o Ubuntu .
  2. Use seu editor favorito para abrir um arquivo de texto para escrever o script. Eu estou usando 'nano'. Assim nano ~/grepc.sh . Isso abre um arquivo chamado grepc.sh em meu / home ( ~/ ).
  3. Cole este script bash nisso.

    #!/bin/sh
    while read line
    do
      echo -e '\e[1;31m'"$line"
      read line
      echo -e '\e[1;32m'"$line"
    done
    echo -en '\e[0m'
    
  4. Se você estiver no nano, pressionar Ctrl + X tentará fechar o nano, mas antes disso ele perguntará se você deseja salvar o arquivo . Faça isso pressionando y no teclado.

  5. Agora você precisa tornar esse script executável. Digite o comando chmod +x ~/grepc.sh .
  6. É isso. Agora use isto com comandos do grep como este: ls ~/ | grep "test" | ./grepc.sh (Assumindo que o comando é executado em / home).
por 18.11.2013 / 17:02
0

Esta é uma adaptação da solução da Kimvais (que Unreallist também usou). Crie grepc.bash :

while read line
do
     echo "$line"
     read line && echo "$line" | sed $'s/\(\e\[\([0-9]+;\))*\)31m/\132m/g'
done

Isso usa sed para alterar a seqüência de escape para vermelho para a seqüência de escape para verde em linhas alternadas de sua entrada. Use, por exemplo, como

grep --color=always (whatever) (whatever) | (path to the script)/grepc.bash

Parece que grep --color usa cores somente se estiver gravando no terminal (janela), e você precisa usar =always para usar cores quando estiver escrevendo para um canal. E, por dentro, é convencional colocar utilitários pessoais como esse em ~/bin , e adicione isso ao seu PATH, para que você não precise especificá-lo quando executar o utilitário.

    
por 15.08.2014 / 00:02