Removendo caracteres não imprimíveis dos logs de espera?

8

Como posso retirar as seguintes seqüências de caracteres dos meus arquivos? ^[[64;8H, etc ^[[?25h, ^[[1;64rou evite esperar adicioná-los em primeiro lugar?

Fundo:

Estou usando uma coleção de scripts de espera para determinadas tarefas.

Os arquivos de saída que estou coletando geralmente contêm o tipo de caracteres acima (conforme exibido no emacs / vi / cat -v). Eu tentei vários comandos tr como o seguinte, mas apenas torna visível o [64; 8H etc.

tr -dc '[:print:]\n' < input

EDITAR:

Os resultados acima em uma linha problemática

[1;64r[64;1H[64;1H[2K[64;1H[?25h[64;1H[64;.....
Tim Brigham
fonte

Respostas:

6

Você estava perto. Você quer

tr -dc '[:print:]\n' <input

Na tr(1)página do manual:

-c, -C, --compl
use o complemento de SET1

Atualizar

Se você deseja remover também as seqüências de escape, pode usar o seguinte sedsnippet:

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

Ele foi retirado de uma questão de falha no servidor chamada No CentOS 4.4, como posso remover seqüências de escape de um arquivo de texto?

Joseph R.
fonte
Obrigado Joseph. Isso torna os personagens visíveis, mas não os tira. Vou mostrar os resultados no corpo da pergunta.
Tim Brigham
@TimBrigham A atualização ajuda?
Joseph R.
1

Depois de algumas experiências (eu uso a casca de peixe, que colore tudo):

perl -pe '
    s/\033\\\\\[(\d+;)*\d*[[:alpha:]]//g;
    s/\033\\\\\]0;//g;
    s/\x7//g;
    s/\033\(B//g;
' expect.log
Glenn Jackman
fonte