Actualmente estoy usando el siguiente comando para usar los colores ANSI estándar con el comando tail:
tail -f syslogfile | sed -e 's/\(.*MAJOR.*\)/\o033[93m\1\o033[39m/'
Este es amarillo brillante, sin embargo, estoy empezando a usar 256 colores extendidos en bash y me gustaría usar el color naranja. Encontré el esquema de numeración de colores de primer plano y de fondo correcto para obtener naranja sobre negro.
echo -e "\\033[40;5;95;38;5;202mhello world\\033[0m"
Sin embargo, tengo problemas para traducir esto a un comando sed que pueda usar con el comando tail.
He probado esto:
sed -e 's/\(.*MAJOR.*\)/\033[40;5;95;38;5;202\033[0m/'
Pero eso deja todo blanco. Yo he tratado:
sed -e 's/\(.*MAJOR.*\)/\o033[40;5;95;38;5;202\o033[0m/'
Pero esto oscurece las líneas que contienen la cadena "MAJOR". También intenté omitir el esquema de fondo y optar simplemente por el color naranja:
sed -e 's/\(.*MAJOR.*\)/\033[38;5;202\033[0m/'
Pero esto también parece oscurecer las líneas que contienen la palabra "MAJOR". ¿Alguien sabe cuál sería la secuencia ANSI correcta para que sed me dé naranja sobre negro? Para su información, el comando sed que utilicé en mi primer ejemplo imprime la línea completa en el color elegido y necesitaría el mismo comportamiento con la nueva secuencia de colores, no solo colorear la palabra en sí.
ACTUALIZAR:
Esto funciona:
sed -e 's/\(.*MINOR.*\)/\o033[38;5;202m\1\o033[40;5;95m/'
Pero deja otras líneas que no contienen magenta de color MENOR. ¿Cómo puedo hacer para que vuelvan a ser blancos por defecto? ¿No estoy apagando algo correctamente? En realidad, está creando un color de fuente predeterminado para todo el shell magenta, como puedo ver cuando finalizo el comando tail.
Respuesta1
Hay más de un problema, visto al hacer un script de tus ejemplos:
#!/bin/sh
MSG="this is MAJOR stuff"
echo "$MSG" | sed -e 's/\(.*MAJOR.*\)/\o033[93m\1\o033[39m/'
echo "$MSG" | sed -e 's/\(.*MAJOR.*\)/\033[40;5;95;38;5;202\033[0m/'
echo "$MSG" | sed -e 's/\(.*MAJOR.*\)/\o033[40;5;95;38;5;202\o033[0m/'
echo "$MSG" | sed -e 's/\(.*MAJOR.*\)/\033[38;5;202\033[0m/'
que produce ( ^[
es escape):
^[[93mthis is MAJOR stuff^[[39m
this is MAJOR stuff33[40;5;95;38;5;202this is MAJOR stuff33[0m
^[[40;5;95;38;5;202^[[0m
this is MAJOR stuff33[38;5;202this is MAJOR stuff33[0m
En la primera línea, a ^[[93m
es el escape de 16 colores de aixterm para establecer un texto amarillo y ^39m
restablece el texto a los colores predeterminados del terminal.
La segunda línea tiene problemas con una secuencia de escape no terminada (que comienza configurando el fondo en negro=40, parpadeo=5, 95=texto magenta brillante, luego 38 y 5 intentan introducir una secuencia de 256 colores, que no termina) .
La tercera línea es una ligera variación de la segunda.
El principal problema es que sed
no emite un carácter de escape a menos que lo exprese como \o033
(lo cualhizohacer en algunos lugares).
En segundo lugar, no estás poniendo fin a las fugas correctamente. Esa final m
es parte de la secuencia. Cuando falta el carácter final, se puede descartar toda la secuencia. Lo mejor es leer la documentación:Secuencias de control XTerm.
Por cierto,ANSINunca documenté nada más allá de 8 colores, por lo que es menos confuso hacer referencia a las secuencias mediante la implementación original (aixterm para 16 colores, xterm para 256 colores).
Si simplemente quieres líneas enteras conIMPORTANTEpara estar resaltado en naranja, entonces (según los comentarios), podría haber hecho esto:
sed -e 's/^\(.*MAJOR.*\)$/\o033[48;5;95m\1\o033[m/'
Sin embargo, el 5
código es menos compatible que el 2
uso de R/G/B, algo como esto:
sed -e 's/^\(.*MAJOR.*\)$/\o033[48;2;128;128;0m\1\o033[m/'
(Los 128 son sólo un primer intento; sus gustos pueden variar).
Otras lecturas:
- ECMA-48: Funciones de control para juegos de caracteres codificados
- ¿Puedo establecer un color por su número?(Preguntas frecuentes sobre xterm)
- Secuencias de control XTerm
En particular, la sección que comienza con
Respuesta2
Probablemente estés buscando esto:
sed -e 's/\(.*MAJOR.*\)/\o033[48;5;95;38;5;202m\1\o033[0m/'
aunque se puede simplificar con
sed -e 's/.*MAJOR.*/\o033[48;5;95;38;5;202m&\o033[m/'
Observe el cambio de 40
lo 48
que significa que queremos cambiar el color de fondo.
Si desea que el color de fondo sea negro:
sed -e 's/.*MAJOR.*/\o033[40;38;5;202m&\o033[m/'
y si el color de fondo ya es negro, no es necesario cambiarlo en absoluto:
sed -e 's/.*MAJOR.*/\o033[38;5;202m&\o033[m/'