Modificando el color de grep

23

Cuando agarro algo, el resultado siempre está en rojo. Sé que el comando grep --colorimprime el resultado en color, que por defecto es rojo. ¿Puedo cambiar el color?

Codito ergo sum
fuente

Respuestas:

18

Puede cambiar el color de resaltado greputilizando una variable de entorno GREP_COLORS, que puede establecer de esta manera:

export GREP_COLORS='ms=01;31'

Opciones numéricas

Los números pueden aplicar estilo al texto, cambiar el color de primer plano o el color de fondo, o cambiar las fuentes.

Las condiciones iniciales para todas las GREP_COLORSopciones son el estilo de texto, fuente y colores predeterminados del terminal. Restablecer cualquiera de estos volverá a los valores predeterminados del terminal, no a ninguno de greplos valores predeterminados.

Leyenda

  • ;ʙ;- ;separa opciones numéricas que desea combinar (por ejemplo, negrita amarillo sobre negro combina texto opciones 1, 33y 40en 1;33;40)
  • +ᴇꜰꜰᴇᴄᴛ- ᴇꜰꜰᴇᴄᴛ se activa cuando usa esa opción numérica
  • -ᴇꜰꜰᴇᴄᴛ- ᴇꜰꜰᴇᴄᴛ se apaga cuando usa esa opción numérica
  • color, green, cyan, Y grey- en la sección "Estilo de texto", éstos se refieren al color de primer plano
  • colors - en la sección "Estilo de texto", esto se refiere tanto al color de primer plano como al color de fondo
  • this color- en la sección "Colores de primer plano", esto se refiere al color de primer plano; en la sección "Colores de fondo", esto se refiere al color de fondo

Estilo de texto

Una cadena vacía o 0restablece todos los estilos de texto y restablece ambos colores a los valores predeterminados, pero no restablece la fuente a los valores predeterminados.

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

Colores de primer 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!)    │
└────────────┴────────────────────────────────────────────────────────────────────┘

Colores de fondo

Tenga en cuenta que el TTY no GUI no proporciona una serie de color de fondo más brillante.

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

Carta de 256 colores

Carta de 256 colores

El cuadro de arriba es una captura de pantalla del contenido publicado en "Código de escape ANSI, colores de 8 bits" en Wikipedia , escrito por CMG Lee et al. el 24 de febrero de 2016 y posteriores , y con licencia de los autores bajo la licencia de copyright CC BY-SA 3.0 y la licencia de copyright GFDL .

Los colores de la tabla de 256 colores anterior se pueden usar de la siguiente manera:

  • 38;5;ɴ- reemplace ɴ con el valor de un color en particular en la tabla anterior para cambiar el color de primer plano al color más cercano que admita el terminal
  • 48;5;ɴ- reemplace ɴ con el valor de un color particular en el cuadro anterior para cambiar el color de fondo al color más cercano que admita el terminal

Por ejemplo, 38;5;214;48;5;30establecerá el primer plano en color 214y el fondo en color 30, dando un resultado naranja sobre verde azulado en los terminales que lo admiten.

Tenga en cuenta que no todos los terminales admiten los 256 colores, por lo que es importante darse cuenta de que el color elegido podría no usarse. Solo se utilizará el color compatible más cercano al elegido.

Por ejemplo, el TTY sin GUI solo admite los 16 colores básicos para el primer plano y los 8 colores básicos para el fondo, por lo que los colores más cercanos que terminan siendo utilizados pueden no ser lo que espera. Como ejemplo, la selección naranja sobre verde azulado arriba ( 38;5;214;48;5;30) se muestra como amarillo sobre negro en el TTY sin GUI, ya que esos son los colores compatibles más cercanos.

Fuentes

10es la fuente predeterminada 11a través de 20posibles fuentes alternativas ( 20generalmente significa una fuente 𝕱𝖗𝖆𝖐𝖙𝖚𝖗 en los raros terminales que lo admiten). Solo 10y 12parece existir por defecto en el TTY que no es GUI, y ninguno existe en el Terminal GNOME o xterm.

grepno cambia correctamente las fuentes antes de salir, así que ejecútelo resetsi se atasca en una fuente no deseada después de grepregresar al 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       │
└─────┴─────────────────────────┴─────────────────────────┴───────────────────────┘

Fuentes de la sección "Opciones numéricas":
        "Código de escape ANSI, parámetros SGR (Seleccionar representación gráfica)" en Wikipedia
        ● Verificación experimental en el terminal GNOME xtermy TTY sin modo GUI en Ubuntu 16.04


ejemplos de cambios de color después de configurar <code> GREP_COLORS </code>

El valor predeterminado de GREP_COLORSes'ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'

El significado de cada elemento aceptado GREP_COLORSpuede consultarse en la página del manual de GNU.org .

Para completar, y como lo señaló @damadam, debe agregarlo exporta su .bashrcpara guardar los cambios.

Relacionado:

Grep multicolor

Usa diferentes colores para cada grep

M. Becerra
fuente
2
Hay muchos más colores y opciones de formato disponibles, ¡pruébalo <<<hello GREP_COLORS='ms=5;104' grep '.*'una vez! Puede encontrar una lista de códigos, por ejemplo, aquí (sección 6).
postre
1
¿Cómo utiliza los valores de color de la tabla de 256 colores con GREP_COLORS?
Sebastian Stark
1
@SebastianStark Para el primer plano, use 38;5;ɴ, donde ɴ debe reemplazarse con uno de los valores de color. Para el fondo, úselo 48;5;ɴde la misma manera. Por ejemplo, 38;5;214;48;5;30debería darle naranja sobre verde azulado. Si no es así, es posible que su terminal no admita 256 colores. Por ejemplo, el TTY no GUI solo admite 16 colores para el primer plano y 8 para el fondo y seleccionará los colores de primer plano y de fondo de los 16 y 8 más cercanos al naranja en verde azulado, que es amarillo sobre negro.
Chai T. Rex
1
@ ChaiT.Rex thx, funciona bien. Sin embargo, no es muy obvio por la respuesta.
Sebastian Stark
2
@ ChaiT.Rex gracias, aunque para mí el problema era más que en la sección "256 colores" del texto no se mencionan esas opciones, solo la tabla de colores
Sebastian Stark,
6

Además de la respuesta de @M. Becerra, no olvides agregar esto exportadentro ~/.bashrc. Puedes hacerlo así:

nano ~/.bashrc

y escriba ahora su export:

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

Esto establece los grepresultados en amarillo, y no necesito rehacer el exportterminal después del reinicio o la computadora.

damadam
fuente
55
edite la respuesta original para mejorarla la próxima vez.
Thorbjørn Ravn Andersen
Esto es mejor, pero solo parece funcionar en Linux, no en Mac :(
Sridhar Sarnobat
@SridharSarnobat Mac es realmente diferente de Ubuntu, Mac no es Linux, y hago este paso para Ubuntu (si fuera para Mac, estaría fuera de tema aquí, las preguntas de Mac deben hacerse en Preguntar diferente
damadam
Sí. Sin embargo, no vale la pena publicar otra pregunta solo para mostrar mi tristeza :)
Sridhar Sarnobat