Exibe caracteres nulos no PuTTY

3

Um programa em execução em um servidor envia dados de texto delimitados por um caractere nulo ( ^A , SOH). Quando eu acesso esse servidor via PuTTY, o PuTTY ignora os caracteres de controle; não os exibe em sua tela "terminal". Isso torna os dados muito difíceis de interpretar, pois é impossível distinguir onde um campo termina e o próximo começa. Se eu abro a sessão do PuTTY logfile em um editor de texto, all os caracteres de controle ficam visíveis. Existe alguma maneira de configurar o PuTTY para exibir algo quando ele recebe um caractere de controle? (As mensagens estão no padrão protocolo FIX , se alguém estiver curioso.)

Como o PuTTY mostra a mensagem:

< p > 14 = 200015 = USD17 = 80100009620 = 022 = 129 = 130 = O31 = 158,92788132 = 320037 = 000000000038 = 039 = 140 = 2

Como o vi mostra a mesma mensagem: (No vi, ^A aparece em azul, facilitando a leitura.)

^ A 14 = 2000 ^ A 15 = USD ^ A 17 = 801000096 ^ A 20 = 0 ^ A 22 = 1 ^ A 29 = 1 ^ A 30 = O ^ A 31 = 158,927881 < b> ^ A 32 = 3200 ^ A 37 = 0000000000 ^ A 38 = 0 ^ A 39 = 1 ^ A 40 = 2

Se eu substituir os nulos por espaços, é compreensível de relance:

14 = 2000 15 = USD 17 = 801000096 20 = 0 22 = 1 29 = 1 30 = O 31 = 158,927881 32 = 3200 37 = 0000000000 38 = 0 39 = 1 40 = 2

    
por Shouvik Sayef 08.03.2013 / 21:55

2 respostas

1

Substitua os caracteres não imprimíveis por algo legível.

antes

$ find  -print0
../03.lines./04.lines./02.lines./01.lines$

depois de

$ find  -print0 | sed 's/
$ find  -print0
../03.lines./04.lines./02.lines./01.lines$
/ /g' ../ 3.lines./ 4.lines./ 2.lines./ 1.lines$
    
por 21.07.2013 / 03:57
0

Use stdbuf (de coreutils ) e tr :

$ while true; do printf "ASDF
$ while true; do printf "ASDF
$ while true; do printf "ASDF
$ while true; do printf "ASDF%pre%1"; sleep 0.5; done | awk 'BEGIN{RS="%pre%1"}; {printf "%s ", $0}'
ASDF ASDF ASDF ASDF ASDF ...
1"; sleep 0.5; done | stdbuf -o0 tr '%pre%1' ' ' ASDF ASDF ASDF ASDF ASDF ...
1"; sleep 0.5; done | awk 'BEGIN{RS="%pre%1"}; {printf "%s ", $0}' ASDF ASDF ASDF ASDF ASDF ...
1"; sleep 0.5; done | stdbuf -o0 tr '%pre%1' ' ' ASDF ASDF ASDF ASDF ASDF ...

Observação: stdbuf não é necessário ao substituir por uma nova linha, ou seja, tr '%code%1' '\n'

Ou use awk / gawk

%pre%

Isso funciona independentemente do terminal. Consulte O que é o armazenamento em buffer ... para obter mais informações.

    
por 05.03.2014 / 18:44