Saltar al contenido

Guardar la salida de un grep en un archivo con colores

Tenemos el hallazgo a este rompecabezas, al menos eso creemos. Si tienes dudas puedes dejarlo en el apartado de comentarios, que sin dudas

Solución:

Para mantener el marcado, necesita algo más que un archivo de texto. Usaría la salida HTML para mantener los colores.

  • Instale aha, es decir, para “convertir secuencias de escape ANSI de un terminal Unix en código HTML”

    sudo apt-get install aha
    
  • entonces guarda tu grep (o ls) salida como esta:

    ls --color=always | aha --black --title 'ls-with-colors' > ls-with-colors.html
    

    opciones:

    --black param to set background as black color
    --title param to set the title for HTML page
    

Resaltado de sintaxis para la extensión de archivo a través de pygmentize

  • Instalar en pc pygmentize:

    sudo apt-get install python-pygments
    
  • luego ejecute este tipo de comando:

    pygmentize file.pl | grep -i --color=always version | aha --black > ls-with-colors.html
    

ingrese la descripción de la imagen aquí

Dependiendo de lo que desee hacer con el archivo de salida, es posible agregar colores a un archivo de texto normal porque los colores simplemente provienen de algunos caracteres especiales. Grep parece no querer imprimirlos cuando lo redirige a un archivo, por lo que debe forzarlo a:

grep --color=always "stuff" input.txt > output.txt

Ahora, cuando imprima el archivo en la consola, se imprimirá con los colores, porque Bash interpreta esos caracteres como “usar este color”.

cat output.txt

Sin embargo, si lo abre en un editor como vim, obtendrá algunos caracteres extraños. Por ejemplo, cuando uso los comandos

echo "A sentence. A red sentence. Another sentence." 
  | grep --color=always "A red sentence" > output.txt

La salida se ve bien cuando la imprimo usando cat pero cuando lo abro en vim yo obtengo

A sentence. ^[[01;31m^[[KA red sentence^[[m^[[K. Another sentence.

Entonces, si desea usar un editor, probablemente no sea lo que desea.

Si entendí correctamente, desea guardar una salida de terminal en un archivo de texto, ¿verdad? Pero quieres que esté formateado con colores. Si ese es el caso, aquí están mis ideas:

Resaltar la salida automáticamente

Como probablemente sepa, si captura una salida grep en un archivo de texto, exactamente porque es un archivo de texto, no se puede formatear. Entonces, hasta donde yo sé, no puedes hacerlo de una manera fácil.

A pesar de eso, existe una solución simple, que consiste en hacer que su editor de texto se dé cuenta de qué tipo de archivo se está abriendo. Por ejemplo, supongamos que su salida grep tiene algunos componentes bash, por lo que los resaltados bash funcionan para usted (por cierto, estos son a menudo los colores que ve en una salida coloreada en la terminal). Entonces, el truco es guardar la salida de texto en un archivo con la extensión adecuada. En lugar de hacer algo como:

ls | grep something > output

puedes ir por

ls | grep something > output.sh

Lo que hará que gedit (o cualquier editor de texto decente) reconozca automáticamente que está hablando de código bash y lo resaltará en consecuencia. No necesita colorear la salida, el programa lo hará por usted si reconoce el tipo de código que está abriendo. Si está trabajando con otro tipo de formatos, simplemente adapte la extensión a ese ajuste mejor para lo que está buscando (por ejemplo, > salida.xml, > salida.html, > salida.py …etc). ¡Buena suerte! 🙂

Resaltar algunas palabras en el archivo de salida

Entonces, si lo tengo, desea resaltar las palabras que buscó. Nuevamente, eso no se puede hacer en un archivo de texto sin formato solo porque es un texto sin formato. Sin embargo, puede agregarle algún formato de una manera muy fácil, como usar un poco de codificación html. Esto transformará su salida en un código html, y cuando lo abra con un programa capaz de interpretar html (libreoffice escritor, firefox y 10000 etcéteras) verá algunas palabras resaltadas.

Para hacerlo, digamos que este es tu grep, exportado a html:

ls | grep keytext > output.html

Y ahora quieres resaltar texto clave en su salida. Puedes usar sed para hacerlo, como:

sed -i 's/keytext/keytext/g' output.html

Y violà, ahora tu texto clave está resaltado en rojo.

Si estás contento con lo expuesto, tienes la opción de dejar una noticia acerca de qué te ha parecido este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *