Puedo usar el comando "script" para grabar una sesión interactiva en la línea de comando. Sin embargo, esto incluye todos los caracteres de control y códigos de color. Puedo eliminar los caracteres de control (como retroceso) con "col -b", pero no puedo encontrar una manera simple de eliminar los códigos de color.
Tenga en cuenta que quiero usar la línea de comandos de la manera normal, así que no quiero deshabilitar los colores allí, solo quiero eliminarlos de la salida del script. Además, sé que puedo jugar e intentar encontrar una expresión regular para arreglar las cosas, pero espero que haya una solución más simple (y más confiable, ¿qué pasa si hay un código que no conozco cuando desarrollo la expresión regular?).
Para mostrar el problema:
spl62 tmp: script Script iniciado, el archivo es mecanografiado spl62 lepl: ls add-licence.sed build-example.sh commit-test push-docs.sh add-licence.sh build.sh delete-licence.sed setup.py asn build-test.sh delete-licence.sh src build-doc.sh clean doc-src test.ini spl62 lepl: salir Script hecho, el archivo es mecanografiado spl62 tmp: mecanografiado cat -v El guión comenzó el jue 09 jun 2011 09:47:27 AM CLT spl62 lepl: ls ^ M ^ [[0m ^ [[00madd-licence.sed ^ [[0m ^ [[00; 32mbuild-example.sh ^ [[0m ^ [[00mcommit-test ^ [[0m ^ [[00; 32mpush-docs.sh ^ [[0m ^ M ^ [[00; 32madd-licence.sh ^ [[0m ^ [[00; 32mbuild.sh ^ [[0m ^ [[00mdelete-licence.sed ^ [[0m ^ [[00msetup.py ^ [[0m ^ M ^ [[01; 34masn ^ [[0m ^ [[00; 32mbuild-test.sh ^ [[0m ^ [[00; 32mdelete-licence.sh ^ [[0m ^ [[01; 34msrc ^ [[0m ^ M ^ [[00; 32mbuild-doc.sh ^ [[0m ^ [[00; 32mclean ^ [[0m ^ [[01; 34mdoc-src ^ [[0m ^ [[00mtest.ini ^ [[0m ^ M spl62 lepl: salir ^ M Guión hecho el jue 09 jun 2011 09:47:29 AM CLT spl62 tmp: col -b <mecanografiado El guión comenzó el jue 09 jun 2011 09:47:27 AM CLT spl62 lepl: ls 0m00madd-licence.sed0m 00; 32mbuild-example.sh0m 00mcommit-test0m 00; 32mpush-docs.sh0m 00; 32madd-licence.sh0m 00; 32mbuild.sh0m 00mdelete-licence.sed0m 00msetup.py0m 01; 34masn0m 00; 32mbuild-test.sh0m 00; 32mdelete-licence.sh0m 01; 34msrc0m 00; 32mbuild-doc.sh0m 00; 32mclean0m 01; 34mdoc-src0m 00mtest.ini0m spl62 lepl: salir Guión hecho el jue 09 jun 2011 09:47:29 AM CLT
fuente
Actualizar la respuesta de Gilles para eliminar también los retornos de carro y borrar espacios anteriores de caracteres anteriores, que fueron importantes para mí para un mecanografiado generado en Cygwin:
fuente
Lo usaría
sed
en este caso.hacer:
cat -v typescript | sed -e "s/\x1b\[.\{1,5\}m//g"
sed -e "s / search / replace / g" es material estándar. La expresión regular se explica a continuación:
\x1b
coincidir con el Escape anterior al código de color\[
coincide con el primer paréntesis abierto.\{1,5\}
coincide con 1 a 5 de cualquier carácter individual. Tiene que\
usar llaves para evitar que la cáscara las destroce.m
último carácter en expresiones regulares: generalmente sigue el código de color.//
cadena vacía para reemplazar todo.g
coincidir varias veces por línea.fuente
foo\e[1m(1m = {
convierte enfoo = {
lugar defoo(m = {
), el reemplazo.
por[0-9;]
es más preciso..\{1,5\}
con[^m]\{1,5\}
para eso - sino que también tenga en cuenta que esto incluso entonces todavía sólo elimina los códigos gráficos de "entregas extraordinarias" (aquellos que terminan en unam
) - básicamente de color, revertir, negrita y cursiva estilos (en su caso).\x1b(B
(incluido en la salida de color\x1b
y no\033
?\u001b
lugar de\x1b
fuente
=> cómo usar:
probado en: - AIX 5.x / 6.1 / 7.1 - Linux Mandrake / Mandriva / SLES / Fedora - SunOS
fuente
Resolví el problema ejecutando
scriptreplay
en una pantalla y volcando el búfer de desplazamiento a un archivo.El siguiente script de esperar hace esto por usted.
Se ha probado para archivos de registro con hasta 250,000 líneas. En el directorio de trabajo necesita su registro de script, un archivo llamado "tiempo" con 10.000.000 veces la línea "1 10" y el script. Necesito el nombre de su archivo de script como argumento de línea de comando, como
./name_of_script name_of_scriptlog
.El archivo de tiempo puede ser generado por
fuente
delay
blocksize
", así que no hay razón para no hacerlo "0
<entirefile>
" y volcar todo sin demora. Puede hacerlo tomando el tamaño del script menos la primera línea (tail -n +2 typescript|wc -c
) y creando el archivo de sincronización conecho "0 "`tail -n +2 typescript|wc -c` > timing
. Eso será básicamente instantáneo yscriptreplay
reproducirá todo el script a la velocidad más rápida posible.Encontré esta pregunta mientras buscaba la solución al mismo problema. Un poco más de excavación y encontré este script en Live Journal en este enlace. Trabajé perfectamente para mí. También es muy bueno escribir sobre este problema y cómo funciona la solución. Definitivamente vale la pena leerlo. http://jdimpson.livejournal.com/7040.html
fuente
Preferiría usar herramientas especializadas para convertir la salida del script en texto plano, que es constantemente compatible y bien probado, sobre expresiones regulares personalizadas. Así que esto funcionó para mí:
Capturas de comandos de script en archivos de mecanografiado ansi2txt: convierte el código ansi con escapes como códigos de color, espacios de retroceso, etc. en texto normal, sin embargo, descubrí que aún quedan algunos escapes. col -bp: los eliminó por completo.
He probado esto en la última disco de Ubuntu, y funciona.
fuente
Hay un
ansi2txt
comando en elcolorized-logs
paquete en Ubuntu. Elimina los códigos de color ANSI muy bien, pero no se ocupa de cosas como barras de progreso producidas por la emisión^H
o^M
caracteres para sobrescribir el texto en su lugar.col -b
puede lidiar con ellos , por lo que para obtener los mejores resultados, puede combinar los dosfuente
Descubrí que solo usar
cat
era todo lo que necesitaba para ver la salida delscript
terminal. Esto no ayuda al redirigir la salida a otro archivo, pero hace que el resultado legible, a diferenciacat -v
,col -b
o un editor de texto.Para eliminar colores o guardar los resultados en un archivo, copie y pegue manualmente la salida
cat
en un editor de texto o en otrocat
comando, es decir:fuente
script
incluyó su ejecución salida con códigos de color adjuntos, como en el caso del OP?cat
presenta los colores originales, que se pueden eliminar mediante copia y pegado manual. El OP utilizadocat -v
ycol -b
, ambos códigos presentes en lugar de un resultado final con el formato correcto. He editado mi respuesta.Continuando con la última respuesta que usa tr y: cntrl: ¿podríamos hacer
sed "/^[[:cntrl:]]/d" output.txt
Esto parece funcionar para mí porque todas las líneas generadas por vi comienzan con un carácter de control. También elimina líneas en blanco y líneas que comienzan con una pestaña, aunque eso funciona para lo que estoy haciendo. Quizás haya una manera de hacer coincidir cualquier carácter de control, excepto \ n \ m \ t.
Tal vez podamos buscar el carácter de control particular, y parece que todas las líneas basura generadas por vi comienzan con lo que parece ^ [. hexdump me dice que el primer personaje es 1b, por lo que esto parece funcionar también
sed "/^\x1b/d" output.txt
Esto se parece a una respuesta publicada anteriormente, pero no funciona correctamente porque después de ejecutar el comando, algunos caracteres basura ya se han agregado a la línea de comando como si el usuario los hubiera escrito.
fuente
ls --color
(como se muestra en la pregunta), su solución eliminará casi todas las líneas que contienen información. No está bien. Pero gracias por dejar de lado el uso inútil decat
. :-) tr
- traducir o eliminar caracteresfuente
01;34m
por ejemplo, y eliminará el final de la líneanewline (\n)
.