Modificando a cor do grep

23

Quando eu grep alguma coisa, o resultado está sempre em vermelho. Eu sei que o comando grep --colorimprime o resultado em cores, que por padrão é vermelho. Posso mudar a cor?

Codito ergo sum
fonte

Respostas:

18

Você pode alterar a cor de destaque grepusando uma variável de ambiente GREP_COLORS, que pode ser definida assim:

export GREP_COLORS='ms=01;31'

Opções numéricas

Os números podem estilizar o texto, alterar a cor do primeiro plano ou a cor do plano de fundo ou alterar as fontes.

As condições iniciais para todas as GREP_COLORSopções são o estilo de texto, fonte e cores padrão do terminal. A redefinição de qualquer um desses itens reverterá para os padrões do terminal, e não para os padrões do terminal grep.

lenda

  • ;ʙ;- ;separa opções numéricas que você quiser combinar (por exemplo, negrito amarelo sobre preto combina texto opções 1, 33e 40em 1;33;40)
  • +ᴇꜰꜰᴇᴄᴛ- ᴇꜰꜰᴇᴄᴛ é ativado quando você usa essa opção numérica
  • -ᴇꜰꜰᴇᴄᴛ- ᴇꜰꜰᴇᴄᴛ é desativado quando você usa essa opção numérica
  • color, green, cyan, E grey- na seção "estilo de texto", referem-se a cor de primeiro plano
  • colors - na seção "Estilo do texto", refere-se à cor do primeiro plano e da cor do plano de fundo
  • this color- na seção "Cores do primeiro plano", refere-se à cor do primeiro plano; na seção "Cores do plano de fundo", refere-se à cor do plano de fundo

Estilo de texto

Uma sequência vazia ou 0redefine todo o estilo do texto e redefine as duas cores para os padrões, mas não redefine a fonte para o padrão.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│     │ «reset style+colors»    │ «reset style+colors»    │ «reset style+colors»  │
│   0 │ «reset style+colors»    │ «reset style+colors»    │ «reset style+colors»  │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│   1 │ +bold, +brighter color  │ +bold, +brighter color  │ +brighter color,      │
│     │                         │                         │   -forced grey        │
│   2 │ +fainter color          │ +fainter color          │ +forced grey          │
│   3 │ +italic                 │ +italic                 │ +forced green         │
│     │                         │                         │   ● overrides 2 and 4 │
│   4 │ +underline              │ +underline              │ +forced cyan          │
│     │                         │                         │   ● overrides 2       │
│   5 │ «no effect»             │ +blink                  │ «no effect»           │
│   7 │ +invert colors          │ +invert colors          │ +invert colors        │
│   8 │ +invisible              │ +invisible              │ «no effect»           │
│     │                         │   ● underline appears   │                       │
│   9 │ +strikethrough          │ +strikethrough          │ «no effect»           │
├─────┼─────────────────────────┤                         ├───────────────────────┤
│  21 │ -bold, -brighter color, │ +double underline       │ -brighter color,      │
│     │   -fainter color        ├─────────────────────────┤   -forced grey        │
│  22 │ -bold, -brighter color, │ -bold, -brighter color, │ -brighter color,      │
│     │   -fainter color        │   -fainter color        │   -forced grey        │
│  23 │ -italic                 │ -italic                 │ -forced green         │
│  24 │ -underline              │ -underline,             │ -forced cyan          │
│     │                         │   -double underline     │                       │
│  25 │ «no effect»             │ -blink                  │ «no effect»           │
│  27 │ -invert colors          │ -invert colors          │ -invert colors        │
│  28 │ -invisible              │ -invisible              │ «no effect»           │
│  29 │ -strikethrough          │ -strikethrough          │ «no effect»           │
└─────┴─────────────────────────┴─────────────────────────┴───────────────────────┘

Cores de primeiro plano

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│  39 │ «reset this color»      │ «reset this color»      │ «reset this color»    │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│  30 │ very dark grey          │ black                   │ black                 │
│  31 │ dull red                │ red                     │ light red             │
│  32 │ dull green              │ light green             │ light green           │
│  33 │ dull yellow             │ yellow                  │ yellow                │
│  34 │ greyish blue            │ dark blue               │ sky blue              │
│  35 │ dull purple             │ purple                  │ purple                │
│  36 │ teal                    │ cyan                    │ cyan                  │
│  37 │ light grey              │ light grey              │ light grey            │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│  90 │ dark grey               │ dull grey               │ dull grey             │
│  91 │ red                     │ bright red              │ bright red            │
│  92 │ lime green              │ bright green            │ bright green          │
│  93 │ yellow                  │ bright yellow           │ pure yellow           │
│  94 │ light greyish blue      │ dull blue               │ deep blue             │
│  95 │ light purple            │ magenta                 │ magenta               │
│  96 │ cyan                    │ bright cyan             │ bright cyan           │
│  97 │ off white               │ white                   │ white                 │
├─────┴──────┬──────────────────┴─────────────────────────┴───────────────────────┤
│ 38;2;ʀ;ɢ;ʙ │ replace ʀ, ɢ, and ʙ with RGB values from 0 to 255                  │
│            │   for closest supported color (non-GUI TTY has only 16 colors!)    │
│ 38;5;ɴ     │ replace ɴ with value from 256-color chart below                    │
│            │   for closest supported color (non-GUI TTY has only 16 colors!)    │
└────────────┴────────────────────────────────────────────────────────────────────┘

Cores de fundo

Observe que o TTY não GUI não fornece uma série de cores de fundo mais brilhantes.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│  49 │ «reset this color»      │ «reset this color»      │ «reset this color»    │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│  40 │ very dark grey          │ black                   │ black                 │
│  41 │ dull red                │ red                     │ light red             │
│  42 │ dull green              │ light green             │ light green           │
│  43 │ dull yellow             │ yellow                  │ yellow                │
│  44 │ greyish blue            │ dark blue               │ sky blue              │
│  45 │ dull purple             │ purple                  │ purple                │
│  46 │ teal                    │ cyan                    │ cyan                  │
│  47 │ light grey              │ light grey              │ light grey            │
├─────┼─────────────────────────┼─────────────────────────┼╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶┤
│ 100 │ dark grey               │ dull grey               │ black                 │
│ 101 │ red                     │ bright red              │ light red             │
│ 102 │ lime green              │ bright green            │ light green           │
│ 103 │ yellow                  │ bright yellow           │ yellow                │
│ 104 │ light greyish blue      │ dull blue               │ sky blue              │
│ 105 │ light purple            │ magenta                 │ purple                │
│ 106 │ cyan                    │ bright cyan             │ cyan                  │
│ 107 │ off white               │ white                   │ light grey            │
├─────┴──────┬──────────────────┴─────────────────────────┴───────────────────────┤
│ 48;2;ʀ;ɢ;ʙ │ replace ʀ, ɢ, and ʙ with RGB values from 0 to 255                  │
│            │   for closest supported color (non-GUI TTY has only 8 colors!)     │
│ 48;5;ɴ     │ replace ɴ with value from 256-color chart below                    │
│            │   for closest supported color (non-GUI TTY has only 8 colors!)     │
└────────────┴────────────────────────────────────────────────────────────────────┘

Cartela de 256 cores

Cartela de 256 cores

O gráfico acima é uma captura de tela do conteúdo publicado em "Código de escape ANSI, cores de 8 bits" na Wikipedia , de autoria de CMG Lee et al. em 24 de fevereiro de 2016 e posteriores , e licenciado pelos autores sob ambos a licença de copyright CC BY-SA 3.0 e a licença de copyright GFDL .

As cores da tabela de 256 cores acima podem ser usadas da seguinte maneira:

  • 38;5;ɴ - substitua ɴ pelo valor de uma cor específica na tabela acima para alterar a cor primeiro plano para a cor mais próxima que o terminal suportar
  • 48;5;ɴ - substitua ɴ pelo valor de uma cor específica na tabela acima para alterar a cor de fundo para a cor mais próxima que o terminal suportar

Por exemplo, 38;5;214;48;5;30 definirá o primeiro plano como cor 214e o fundo como cor 30, fornecendo um resultado laranja-azul-petróleo nos terminais que o suportam.

Observe que nem todos os terminais suportam todas as 256 cores; portanto, é importante perceber que a cor escolhida pode não ser usada. Somente a cor suportada mais próxima da escolhida será usada.

Por exemplo, o TTY não GUI suporta apenas as 16 cores básicas em primeiro plano e as 8 cores básicas em segundo plano, portanto, as cores mais próximas que acabam sendo usadas podem não ser as esperadas. Como exemplo, a seleção de laranja na cerceta acima (38;5;214;48;5;30 ) é mostrada em amarelo-preto no TTY não GUI, pois essas são as cores suportadas mais próximas.

Fontes

10é a fonte padrão. 11through 20são fontes alternativas em potencial ( 20geralmente significa uma fonte in nos raros terminais que a suportam). Somente 10e 12parece existir por padrão no não-GUI TTY, e nenhum existe no GNOME Terminal ou xterm.

grepnão alterna corretamente as fontes antes de sair, portanto, execute resetse você ficar preso em uma fonte indesejada depois de grepretornar ao shell.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│  10 │ «no effect»             │ «no effect»             │ «reset font»          │
│  11 │ «no effect»             │ «no effect»             │ -messed up font       │
│  12 │ «no effect»             │ «no effect»             │ +messed up font       │
└─────┴─────────────────────────┴─────────────────────────┴───────────────────────┘

Fontes da seção "Opções numéricas":
        "Código de escape ANSI, parâmetros SGR (Select Graphic Rendition)" na Wikipedia
        ● Verificação experimental no GNOME Terminal xterme TTY no modo GUI no Ubuntu 16.04


exemplos de alterações de cores após definir <code> GREP_COLORS </code>

O valor padrão de GREP_COLORSé'ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'

O significado de cada elemento aceito GREP_COLORSpode ser verificado em página de manual do GNU.org .

Para conclusão, e conforme indicado por @damadam, você precisa adicioná-lo exportao seu .bashrcpara salvar as alterações.

Palavras-chave:

Grep multicolorido

Use cores diferentes para todos os outros grep

M. Becerra
fonte
2
muito mais opções de cores e formatação disponíveis, tente <<<hello GREP_COLORS='ms=5;104' grep '.*'uma vez! Uma lista de códigos pode ser encontrada, por exemplo, aqui (seção 6).
dessert
1
Como você usa valores de cores da tabela de 256 cores com GREP_COLORS?
Sebastian Stark
1
@SebastianStark Para primeiro plano, use 38;5;ɴ, onde ɴ deve ser substituído por um dos valores de cor. Para segundo plano, use 48;5;ɴda mesma maneira. Por exemplo, 38;5;214;48;5;30você deve dar laranja na cerceta. Caso contrário, seu terminal pode não suportar 256 cores. Por exemplo, o TTY que não é da GUI suporta apenas 16 cores em primeiro plano e 8 em segundo plano e seleciona as cores de primeiro e segundo plano entre as 16 e 8 mais próximas da laranja na cerceta, que é amarela no preto.
Chai T. Rex
1
@ ChaiT.Rex thx, funciona muito bem. Não é muito óbvio a partir da resposta.
Sebastian Stark
2
@ ChaiT.Rex graças, embora para mim o problema era mais que na secção "256 cores" do texto, não há menção dessas opções, apenas a tabela de cores
Sebastian Stark
6

Além da resposta de @M. Becerra, não se esqueça de adicionar isso exportdentro ~/.bashrc. Você pode fazer assim:

nano ~/.bashrc

e digite agora seu export:

export GREP_COLORS='ms=01;33:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'

Isso define os grepresultados para amarelo e não preciso refazer o exportterminal após a reinicialização ou o computador.

damadam
fonte
5
edite a resposta original para melhorar da próxima vez.
Thorbjørn Ravn Andersen
Isso é melhor, mas parece funcionar apenas no Linux, não no Mac :(
Sridhar Sarnobat
@SridharSarnobat O Mac é realmente diferente do Ubuntu, o Mac não é Linux, e eu faço esta etapa para o Ubuntu (se fosse para Mac, seria fora de tópico aqui, as perguntas do Mac devem ser feitas no Ask Different
damadam
Sim. Não vale a pena postar outra pergunta para mostrar minha tristeza :)
Sridhar Sarnobat 5/12