Modifica del colore di grep


23

Quando grep qualcosa, il risultato è sempre in rosso. So che il comando grep --colorstampa il risultato a colori, che per impostazione predefinita è rosso. Posso cambiare il colore?

Risposte:


18

È possibile modificare il colore di evidenziazione greputilizzando una variabile di ambiente GREP_COLORS, che è possibile impostare in questo modo:

export GREP_COLORS='ms=01;31'

Opzioni numeriche

I numeri possono modellare il testo, cambiare il colore di primo piano o il colore di sfondo o cambiare i caratteri.

Le condizioni iniziali per tutte le GREP_COLORSopzioni sono lo stile di testo, il carattere e i colori predefiniti del terminale. Il ripristino di uno qualsiasi di questi ripristinerà le impostazioni predefinite del terminale, non quelle greppredefinite.

Leggenda

  • ;ʙ;- ;separa opzioni numeriche che si desidera combinare (ad esempio, grassetto giallo su nero combina testo opzioni 1, 33e 40in 1;33;40)
  • +ᴇꜰꜰᴇᴄᴛ- ᴇꜰꜰᴇᴄᴛ si attiva quando si utilizza quell'opzione numerica
  • -ᴇꜰꜰᴇᴄᴛ- ᴇꜰꜰᴇᴄᴛ viene disattivato quando si utilizza quell'opzione numerica
  • color, green, cyan, E grey- nella sezione "Testo styling", questi si riferiscono al colore di primo piano
  • colors - nella sezione "Stile del testo", si riferisce sia al colore di primo piano sia al colore di sfondo
  • this color- nella sezione "Colori di primo piano", si riferisce al colore di primo piano; nella sezione "Colori di sfondo", si riferisce al colore di sfondo

Stile del testo

Una stringa vuota o 0reimposta tutto lo stile del testo e ripristina entrambi i colori sui valori predefiniti, ma non ripristina il carattere sui valori predefiniti.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ 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»           │
└─────┴─────────────────────────┴─────────────────────────┴───────────────────────┘

Colori di primo piano

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ 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!)    │
└────────────┴────────────────────────────────────────────────────────────────────┘

Colori di sfondo

Si noti che il TTY non GUI non fornisce una serie di colori di sfondo più luminosa.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ 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!)     │
└────────────┴────────────────────────────────────────────────────────────────────┘

Tabella a 256 colori

Tabella a 256 colori

Sopra il grafico c'è uno screenshot del contenuto pubblicato in "Codice di escape ANSI, colori a 8 bit" su Wikipedia , scritto da CMG Lee et al. il 24 febbraio 2016 e versioni successive e concesso in licenza dagli autori in base alla licenza di copyright CC BY-SA 3.0 e alla licenza di copyright GFDL .

I colori della tabella a 256 colori sopra possono essere usati come segue:

  • 38;5;ɴ- sostituire ɴ con il valore di un colore particolare nella tabella sopra per cambiare il colore di primo piano con il colore più vicino supportato dal terminale
  • 48;5;ɴ- sostituire ɴ con il valore di un colore particolare nella tabella sopra per cambiare il colore di sfondo con il colore più vicino supportato dal terminale

Ad esempio, 38;5;214;48;5;30imposterà il primo piano sul colore 214e lo sfondo sul colore 30, dando un risultato arancione-verde acqua sui terminali che lo supportano.

Si noti che non tutti i terminali supportano tutti i 256 colori, quindi è importante rendersi conto che il colore scelto potrebbe non essere utilizzato. Verrà utilizzato solo il colore supportato più vicino a quello scelto.

Ad esempio, il TTY non GUI supporta solo i 16 colori di base per il primo piano e gli 8 colori di base per lo sfondo, quindi i colori più vicini che finiscono per essere utilizzati potrebbero non essere quelli previsti. Ad esempio, la selezione arancione-verde acqua sopra ( 38;5;214;48;5;30) mostra come giallo-nero nel TTY non-GUI, poiché quelli sono i colori supportati più vicini.

Caratteri

10è il carattere predefinito. 11attraverso 20sono potenziali caratteri alternativi (di 20solito significa un carattere 𝕱𝖗𝖆𝖐𝖙𝖚𝖗 nei rari terminali che lo supportano). Solo 10e 12sembra esistere di default nel TTY non GUI, e nessuno esiste nel Terminale GNOME o xterm.

grepnon ripristina correttamente i caratteri prima di uscire, quindi esegui resetse rimani bloccato in un carattere indesiderato dopo il grepritorno alla 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       │
└─────┴─────────────────────────┴─────────────────────────┴───────────────────────┘

Fonti della sezione "Opzioni numeriche":
        "Codice di escape ANSI, parametri SGR (Select Graphic Rendition)" su Wikipedia
        ● Verifica sperimentale sul terminale GNOME xterme TTY non in modalità GUI su Ubuntu 16.04


esempi di cambi di colore dopo aver impostato <code> GREP_COLORS </code>

Il valore predefinito di GREP_COLORSè'ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'

Il significato di ogni elemento accettato GREP_COLORSpuò essere verificato nella pagina del manuale di GNU.org .

Per il completamento, e come sottolineato da @damadam, è necessario aggiungere il exportproprio .bashrcper salvare le modifiche.

Relazionato:

Grep multicolore

Usa colori diversi per ogni altro grep


2
Ci sono molti più colori e opzioni di formattazione disponibili, prova <<<hello GREP_COLORS='ms=5;104' grep '.*'una volta! È possibile trovare un elenco di codici, ad esempio qui (sezione 6).
dessert

1
Come si usano i valori di colore dalla tabella dei 256 colori con GREP_COLORS?
Sebastian Stark,

1
@SebastianStark Per primo piano, utilizzare 38;5;ɴ, dove ɴ deve essere sostituito con uno dei valori di colore. Per lo sfondo, utilizzare 48;5;ɴallo stesso modo. Ad esempio, 38;5;214;48;5;30dovrebbe darti l'arancia sull'alzavola. In caso contrario, il terminale potrebbe non supportare 256 colori. Ad esempio, il TTY non GUI supporta solo 16 colori per il primo piano e 8 per lo sfondo e sceglierà i colori di primo piano e di sfondo tra quelli 16 e 8 più vicini all'arancione sull'alzavola, che è giallo su nero.
Chai T. Rex,

1
@ ChaiT.Rex thx, funziona bene. Non è molto ovvio dalla risposta però.
Sebastian Stark,

2
@ ChaiT.Rex grazie, anche se per me il problema era più che nella sezione "256 colori" del testo non si fa menzione di quelle opzioni, solo la tabella dei colori
Sebastian Stark,

6

Oltre alla risposta di @M. Becerra, non dimenticare di aggiungere questo exportall'interno ~/.bashrc. Puoi farlo così:

nano ~/.bashrc

e digita ora il tuo export:

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

Questo imposta i greprisultati su giallo e non è necessario ripetere il exportterminale di riavvio o il computer.


5
modifica la risposta originale per migliorarla la prossima volta.
Thorbjørn Ravn Andersen,

È più bello, ma sembra funzionare solo su Linux, non su Mac :(
Sridhar Sarnobat,

@SridharSarnobat Il Mac è davvero diverso da Ubuntu, il Mac non è Linux, e faccio questo passaggio per Ubuntu (se fosse per Mac, sarebbe fuori tema qui, le domande sul Mac devono essere poste su Ask Different
damadam

Si. Non vale la pena pubblicare un'altra domanda solo per mostrare la mia tristezza :)
Sridhar Sarnobat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.