Realce a saída de pesquisa do console, enquanto exibe toda a saída do comando

18

Quando uso, por exemplo cat file.txt | grep --color=tty "pattern" obtenho o padrão que pesquiso em destaque. Quando quero mais algum contexto em torno de cada resultado, o grep tem os parâmetros -A , -B e -C .

No entanto, quero exibir o arquivo inteiro (ou qualquer saída de comando) e destacar um determinado padrão. Existe tal comando de destaque ou ferramenta?

    
por DerMike 13.10.2010 / 18:50

6 respostas

21

Houve um answer on unix.stackexchange.com que tinha esse truque legal:

grep -E --color 'pattern|$' file.txt

ou

grep --color 'pattern\|$' file.txt

que corresponde ao seu padrão ou ao fim de linha em cada linha. Apenas o padrão é destacado.

    
por 13.10.2010 / 23:33
9

Eu gosto de ack .

ack --passthru somepattern filename

É como grep, mas melhor. Ele é destacado por padrão e, com a opção --passthru , mostra o arquivo inteiro (ou entrada padrão) em vez de apenas as linhas correspondentes.

    
por 13.10.2010 / 19:28
5

Também recomendo o uso de less (ou algo parecido), mas quero mostrar uma solução mais didática para você. Depois de definir esta função:

function highlight()
{
    sed "s/$1/'tput smso'&'tput rmso'/g" "${2:--}"
}

Você pode usá-lo desta maneira:

command | highlight pattern
highlight pattern file.txt

Observação: essa versão faz distinção entre maiúsculas e minúsculas, para alterar isso basta anexar i após g na expressão sed .

    
por 13.10.2010 / 19:32
3

Passar -C para grep com um valor suficientemente alto fará isso.

    
por 13.10.2010 / 19:28
3

less está destacando o padrão, então

less -p 'mypattern' file.txt

ou

ridiculously | long | pipe | less

e depois em menos / para procurar um padrão que será destacado.

Nota lateral:

Você pode melhorar seu comando, por exemplo, defina alias alias grep="grep --color=tty" e use-o assim:

grep 'mypattern' file.txt;
    
por 13.10.2010 / 19:21
1

Existe uma boa ferramenta supercat , que atende exatamente a esse propósito. Ele pode colorir a saída do seu console e produzir um html "destacado" a partir da sua entrada.

    
por 06.10.2011 / 00:06