Eu encontrei uma boa maneira de fazer isso. No meu sistema, longas linhas de saída são polvilhadas com "^ M" (espaço em branco seguido de retorno de carro). O "^ M" pode ser bem substituído pelo caractere nulo "^ @", que não é exibido quando você cria o arquivo.
Eu também capturei o tempo, então, para reproduzir o arquivo perfeitamente, eu não posso simplesmente remover o "^ M" completamente usando os comandos abaixo (porque o scriptreplay conta os bytes):
tr '\r' 'script -t -f session.log 2>timing
' | sed 's/ \x0//g'
Eu corro meu comando de script assim:
cat session.log | tr '\r' 'tr '\r' 'script -t -f session.log 2>timing
' | sed 's/ \x0//g'
' > typescript
scriptreplay -t timing | sed 's/ \x0//g'
Então, o que eu faço depois é:
cat session.log | tr '\r' '%pre%' > typescript
scriptreplay -t timing | sed 's/ \x0//g'
A primeira edição (antes da repetição) retém o número de bytes no arquivo.
A segunda edição (após o replay) se livra do espaço em branco em lugares aleatórios.
(Note que, por padrão, scriptreplay procura pelo arquivo de entrada chamado "typescript", e é por isso que eu não o forneci após "timing").