unix2dos crlf convert bash unix format

bash - crlf - formato de salida del comando "script" de Unix: eliminar espacios inversos, avances de lĂ­nea y caracteres borrados?



unix file format (4)

Intento utilizar el comando de script para grabar una sesión interactiva de shell para que pueda usarla para preparar la documentación.

de acuerdo con la página del manual:

Script coloca todo en el archivo de registro, incluidos los avances de línea y
Espalda. Esto no es lo que el usuario ingenuo espera.

Soy el usuario ingenuo (generalmente no recibo un saludo en las páginas man, ¡esto es bastante emocionante!), Y me gustaría procesar el resultado para que se eliminen los espacios posteriores, los saltos de línea y los caracteres eliminados, etc.

ejemplo, ejecuto una sesión de script :

stew:~> script -f scriptsession.log Script started, file is scriptsession.log stew:~> date Mon Aug 22 15:00:37 EDT 2011 stew:~> #extra chars: that stew:~> exit exit Script done, file is scriptsession.log

luego uso cat para leer el registro de la sesión:

stew:~> cat scriptsession.log Script started on Mon 22 Aug 2011 03:00:35 PM EDT stew:~> date Mon Aug 22 15:00:37 EDT 2011 stew:~> #extra chars: that stew:~> exit exit Script done on Mon 22 Aug 2011 03:01:01 PM EDT

pero cuando uso menos , veo evidencia de los caracteres no deseados que son invisibles usando cat :

stew:~> less scriptsession.log Script started on Mon 22 Aug 2011 03:00:35 PM EDT stew:~> date Mon Aug 22 15:00:37 EDT 2011 stew:~> #extra chars: thiESC[ESC[ESC[ESC[Kthat stew:~> exit exit Script done on Mon 22 Aug 2011 03:01:01 PM EDT scriptsession.log lines 1-8/8 (END)

cuando uso cat , entiendo que no elimina los caracteres invisibles, simplemente no los representa visiblemente, como menos , por lo que si canalizo la salida de cat a un archivo, todavía tiene los caracteres no deseados.

el formato de salida que me gustaría es una copia de lo que muestra el gato . ¡Gracias!

(¡disculpen si se trata de un duplicado, al buscar "formato de salida de script de Unix" se obtienen muchos resultados de ruido con respecto a la pregunta en cuestión!)



El comando col hará algunos, pero no todos, del filtrado que está buscando. (No parece reconocer las secuencias de control para negrita y subrayado, por ejemplo).

Un enfoque que he usado en el pasado es (a) cambiar el prompt de mi shell para que no resalte (normalmente lo hace), y / o (b) establecer $TERM en "dumb" para que se ganaran varios comandos '' Intentar usar ciertas secuencias de control.


O puede usar el comando "más", que interpretará esos caracteres y mostrará exactamente lo que escribió, recibió como salida, etc., como si hubiera retrocedido en el búfer.


scriptreplay el problema ejecutando scriptreplay en una pantalla y volcando el buffer de desplazamiento hacia un archivo.

La siguiente secuencia de comandos expect hace esto por usted.

Se ha probado para archivos de registro con hasta 250,000 líneas. En el directorio de trabajo necesita su secuencia de comandos, un archivo llamado "tiempo" con 10.000.000 de veces la línea "1 10" y el script. ./name_of_script name_of_scriptlog el nombre de su script como argumento de línea de comando, como ./name_of_script name_of_scriptlog .

#!/usr/bin/expect -f set logfile [lindex $argv 0] if {$logfile == ""} {puts "Usage: ./script_to_readable.exp /$logfile."; exit} set timestamp [clock format [clock sec] -format %Y-%m-%d,%H:%M:%S] set pwd [exec pwd] if {! [file exists ${pwd}/time]} {puts "ERROR: time file not found./nYou need a file named time with 10.000.000 times the line /"1 10/" in the working directory for this script to work. Please provide it."; exit} set wc [exec cat ${pwd}/$logfile | wc -l] set height [ expr "$wc" + "100" ] system cp $logfile ${logfile}.tmp system echo $timestamp >> ${logfile}.tmp set timeout -1 spawn screen -h $height -S $timestamp send "scriptreplay -t time -s ${logfile}.tmp 100000 2>/dev/null/r" expect ${timestamp} send "/x01:hardcopy -h readablelog.${timestamp}/r" send "exit/r" system sed ''/^$/d'' readablelog.$timestamp >> readablelog2.$timestamp system head -n-2 readablelog2.$timestamp >> ${logfile}.readable.$timestamp system rm -f readablelog.$timestamp readablelog2.$timestamp ${logfile}.tmp

El archivo de tiempo puede ser generado por

for i in $(seq 1 10000000); do echo "1 10" >> time; done