realçando parâmetros com grep

0

Estou precisando de alguma ajuda para usar o recurso de destaque no bash.

Meu objetivo é percorrer três parâmetros e depois destacá-los com três cores diferentes. Eu tenho brincado com isso, mas não consigo pensar em como fazer isso.

Eu tentei

Entrada:

user@syslog:~$ grep --color=always Dwhite VPNsyslog-2016 | grep --color date | grep --color time

Saída:

os resultados apenas destacaram Dwhite e a hora por algum motivo não foi destacada. todos eles destacados em vermelho.

Eu também tentei

user@syslog:~$ GREP_COLORS='mt=01;32' grep Dwhite VPNsyslog-2016| GREP_COLORS='mt=01;31' grep date VPNsyslog-2016 | GREP_COLORS='mt=01;34' time VPNsyslog-2016 

saída:

Nada.

Por favor, desculpe-me se a sintaxe está toda levantada. Sou muito novo nisso e não sou programador. Eu sou apenas um administrador de rede tentando tornar o syslog fácil para os olhos.

    
por sidd 08.03.2016 / 00:27

3 respostas

1

grep -E --color=always 'Dwhite|date|time' VPNsyslog-2016

Observe que grep não suporta cores diferentes para correspondências diferentes no mesmo comando - e encadeá-los juntos em um pipeline é efetivamente uma operação AND (portanto, somente as linhas que correspondem a todos os três padrões serão exibidas - e somente padrão final será destacado).

Se você deseja destacar o arquivo de log mais configurável, é necessário usar uma ferramenta especializada, como ccze , clog , colortail , pygmentize ou destaque (entre outros). Todos estes provavelmente já estão empacotados para sua distribuição linux (eles estão certamente no Debian e em derivados Debian como o Ubuntu).

    
por 08.03.2016 / 00:49
1

Você pode tentar isso:

user@syslog:~$ cat VPNsyslog-2016 | GREP_COLORS='mt=01;32' grep --color=always 'Dwhite' | GREP_COLORS='mt=01;31' grep --color=always 'date' |  GREP_COLORS='mt=01;34' 'time'

ou sem executar o comando cat

user@syslog:~$ GREP_COLORS='mt=01;32' grep --color=always 'Dwhite' VPNsyslog-2016 | GREP_COLORS='mt=01;31' grep --color=always 'date' |  GREP_COLORS='mt=01;34' 'time'

Neste último, o STDIN terá o conteúdo do arquivo com o primeiro grep , então você não precisa especificar o arquivo em cada grep execução

Você estava com saudades da bandeira --color=always .

    
por 08.03.2016 / 00:54
0

O padrão y, --color apenas colore a saída se estiver indo para um terminal. Se a saída está indo para um pipe, o grep assume que ele será analisado por um programa que será confundido pelas seqüências de escape extras que o grep insere para colorir a saída. Para colorir a saída, mesmo se ela estiver indo para um pipe, passe --color=always para todas as chamadas do grep.

GREP_COLORS='mt=01;32' grep --color=always Dwhite VPNsyslog-2016 |
GREP_COLORS='mt=01;31' grep --color=always date |
GREP_COLORS='mt=01;34' grep --color=always time

Observe que o grep só imprimirá linhas correspondentes. No seu exemplo, os pipelines imprimirão apenas linhas contendo Dwhite e date e time . Se você quiser imprimir todas as linhas, você pode dizer a cada chamada grep para procurar o que você está procurando ou a string vazia; cada linha contém a string vazia, então cada linha terminará na saída.

GREP_COLORS='mt=01;32' grep --color=always -e '' -e Dwhite VPNsyslog-2016 |
GREP_COLORS='mt=01;31' grep --color=always -e '' -e date |
GREP_COLORS='mt=01;34' grep --color=always -e '' -e time

ou com expressões regulares:

GREP_COLORS='mt=01;32' grep --color=always -E '|Dwhite' VPNsyslog-2016 |
GREP_COLORS='mt=01;31' grep --color=always -E '|date' |
GREP_COLORS='mt=01;34' grep --color=always -E '|time'

Mas, a menos que você esteja preso em uma máquina em que realmente não queira instalar mais nada, é melhor usar uma ferramenta projetada para colorir a saída, como as listadas em casas answer or in esta discussão .

    
por 08.03.2016 / 02:39