'highlight' comando

11

Existe um comando que pode ser usado para destacar facilmente (com cores, texto em negrito ou invertido back / foreground) strings específicas em stdin enquanto passa a string inteira para stdout? Estou pensando em construí-lo , mas prefiro usá-lo se já existir. Algumas características desejáveis:

  1. As strings de destaque separadas são destacadas de maneira diferente, de maneira automática. Por exemplo, a primeira string será destacada em vermelho, a segunda em verde, a terceira em azul sem configuração manual .
  2. Detecta o suporte a cores e volta para os métodos de realce / negrito / invertido / outros onde eles estão disponíveis.
  3. Permitir a correspondência de expressões regulares e sequências literais.
  4. De preferência, faz algo inteligente se as correspondências se sobrepuserem, como "foobar" e "barbar".
  5. Nada é modificado entre stdin e stdout, exceto pela adição de códigos de cores.
por l0b0 16.03.2011 / 14:38

6 respostas

4

Talvez Colouriser genérico (grc) de Radovan Garabík ? Ele espera um arquivo de configuração como argumento e funciona com o regexp. Portanto, não é bem sem configuração, mas você pode usar a substituição do processo de processo ( <(list) ), portanto, sem a configuração manual :-)

    
por 16.03.2011 / 20:49
5

Sed para o resgate!

Você pode melhorar isso (já que realmente precisa), mas funciona muito bem.

$ cat >~/bin/hilight <<EOF
#!/bin/bash
while [ $# -gt 0 ]
do
 COMANDO=$COMANDO's/'$1$'/3[01;'$2$'m3[K\03[m3[K/g\n'
 shift;shift;
done

sed -e "$COMANDO"
EOF

Por uma questão de simplicidade, o hilight aceita um par de argumentos (primeiro a correspondência, segundo a cor). Neste script, o atributo é sempre em negrito

Leia man console_codes (Graphic Rendition) para ver as secuências de escape de cores ou tente isto

for attrib in $(seq 0 12); do
  for color in $(seq 30 37) $(seq 40 47) $(seq 90 97); do
    printf %b " $attrib $color:3[$attrib;${color}mhi, dudes3[m"
  done
done

Tem desvantagens importantes ao usar esse trabalho:

$ dmesg | hilight \[ 34 ] 34

mas isso não é de todo:

$ dmesg | hilight \[ 34 ] 34 [[:digit:]] 31

porque [: digit:] encontra os números nas secuências de escape em versões anteriores.

Algo como:

$ cat /var/log/kern.log | hilight kernel 31 a 34 et 33

funcionará sempre como exceção.

Usando o comando time, eu encontrei este incremento em quatro o tempo decorrido, o que não é muito.

Você pode substituir o comando sed por qualquer outro analisador que você goste ou se adapte às suas necessidades (awk, etc ...)

    
por 27.07.2011 / 11:15
2

Também é possível usar egrep com padrão que corresponde a todas as linhas em caracteres não imprimíveis, como:

dmesg | egrep --color "swap|$"
    
por 03.08.2016 / 01:29
1

clide funciona bem. Eu uso no RHEL 6.2, do repositório EPEL

    
por 29.02.2012 / 15:08
0

Como você mencionou no link, grep --color=always só funciona para um padrão. Dito isso, não acredito que tal ferramenta exista.

    
por 16.03.2011 / 15:09
0

Eu uso o link . Fácil de instalar em várias plataformas por causa do Python. Simples e funciona bem.

    
por 22.01.2014 / 15:40