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
(ols
) 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
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.