Existe uma maneira de colorir a saída de um comando sem usar o bashrc / bash_profile?

2

Eu fiz um programa onde eu posso ler vários logs de diferentes programas, eu quero colorir alguns termos na saída, para que eu possa encontrar as partes mais interessantes. (Eu não vou usar grep ou qualquer coisa semelhante, porque eu ainda preciso ler o log inteiro, eu só quero fazer certos termos interessantes cores diferentes para encontrá-los rapidamente).

Eu encontrei isso , mas novamente, não é o que estou procurando. Eu estou procurando uma maneira de canalizar o texto.

    
por DisplayName 09.09.2015 / 01:30

3 respostas

1

Para colorir a saída do comando ou conteúdo de um arquivo, posso pensar em dois métodos fáceis que podem funcionar bem:

  • grep - pode ser feito para mostrar o restante do arquivo também e fazer várias correspondências com algumas opções avançadas - por exemplo:

    grep --color -iE 'log|kernel' -C 999
    grep --color -iE 'log|kernel|$'
    

    A primeira procura log e kernel sem distinção entre maiúsculas e minúsculas e mostra as 999 linhas adjacentes. A segunda pesquisa por log , kernel e um caractere presente em cada linha (como sugerido aqui ) insensível a maiúsculas e minúsculas. Para obter mais informações, você pode consultar o man grep , se disponível, ou ler o manual para GNU grep ou OSX grep .

  • python-pygments - deve estar disponível em pip . Pode ser usado para destacar a sintaxe, pode ter um lexer disponível para o que você deseja processar.

Além disso, para formatação geral da saída, você pode usar códigos de escape ANSI - por exemplo:

echo -e "3[31mred3[0m"
echo -e "3[34mblue3[0m"

O 3 é um caractere de escape, e depois disso você pode especificar códigos para fazer coisas diferentes - você também pode especificar vários:

echo -e "3[1;31mbold red3[0m"
echo -e "3[4;34mblue underlined3[0m"

Eu não tenho certeza sobre o suporte no OSX embora ... você pode precisar tentar um caractere de escape - as cores no terminal também podem precisar estar ativado .

    
por 09.09.2015 / 01:46
2

Use o grep. Ter ^ como um dos seus termos de pesquisa para que você ainda receba todas as linhas (mas não será colorido, a menos que contenha correspondências visíveis).

Exemplo:

grep -e '[[:upper:]][[:alnum:]]*' -e ^ <<EOF
This Is An
example file.
All lines 
in it will be printed, and all
words that start 
with a Capital
letter will be Colorized.
EOF

(Isto usa um heredoc (procure no manual do shell por "Here Documents"). O stdin canalizado ou um arquivo real teria sido tão bom).

    
por 09.09.2015 / 01:54
0

Se você quiser alterar arbitrariamente as cores do texto, poderá usar sequências de escape ANSI para fazer isso. Por exemplo, ESC [31m mudará a cor do texto para vermelho, ESC [37m produzirá branco, etc.

Você poderia usar sed para inserir os códigos de escape para determinadas cores em locais específicos no fluxo. Veja um exemplo de alguém fazendo exatamente isso.

Além de alterar cores, você pode fazer muitas outras manipulações de saída de tela. Aqui está uma referência.

    
por 09.09.2015 / 02:11

Tags