Zeigen Sie Nullzeichen in PuTTY an

3

Ein Programm, das auf einem Server ausgeführt wird, sendet Textdaten, die durch ein Nullzeichen ( ^A, SOH) begrenzt sind. Wenn ich über PuTTY auf diesen Server zugreife, überspringt PuTTY die Steuerzeichen. es zeigt sie überhaupt nicht auf seinem "Terminal" -Bildschirm an. Dies macht es sehr schwierig, die Daten zu interpretieren, da es unmöglich ist, zu unterscheiden, wo ein Feld endet und das nächste beginnt. Wenn ich PuTTY Sitzung öffnen Logdatei in einem Texteditor, alle Steuerzeichen sichtbar sind. Kann ich PuTTY so konfigurieren, dass etwas angezeigt wird , wenn es ein Steuerzeichen empfängt? (Die Nachrichten sind im Standard- FIX-Protokoll , wenn jemand neugierig ist.)

Wie PuTTY die Nachricht anzeigt:

14 = 200015 = USD17 = 80100009620 = 022 = 129 = 130 = O31 = 158.92788132 = 320037 = 000000000038 = 039 = 140 = 2

Wie vi dieselbe Meldung anzeigt: (In vi wird ^Ablau angezeigt, um das Lesen zu erleichtern.)

^ 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 ^ A 32 = 3200 ^ A 37 = 0000000000 ^ A 38 = 0 ^ A 39 = 1 ^ A 40 = 2

Wenn ich die Nullen durch Leerzeichen ersetze, ist das auf einen Blick verständlich:

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

Shouvik Sayef
quelle
1
Können Sie troder nicht verwenden sed, um sie sichtbar zu machen, bevor Sie sie an den Editor weiterleiten? Vim könnte auch die Eingabe filtern ...
0xC0000022L
Ich möchte sie im Idealfall in der Shell sehen, ohne einen Editor verwenden zu müssen. Ich kann die Protokolldateien mit einem Editor öffnen und null Zeichen sind sichtbar, sodass die Nachrichten lesbar sind. Es gibt jedoch eine erhebliche Verzögerung zwischen dem Senden und dem Protokollieren einer Nachricht und ich muss die eingehenden Nachrichten häufig sofort interpretieren ...
Shouvik Sayef
1
^Aist nicht das Nullzeichen, das Nullzeichen ist ^@. ^Aist das erste Zeichen nach dem Nullzeichen.
Darth Android
Daher habe ich festgestellt, dass dies nicht möglich ist, ohne das Programm zu ändern. 001 ist das SOH-Zeichen, das in keinem Zeichensatz angezeigt wird. In Bezug auf die Änderung der Protokolle hat der Befehl tr den Trick ausgeführt. Vielen Dank
Shouvik Sayef

Antworten:

1

Ersetzen Sie die nicht druckbaren Zeichen durch etwas Lesbares.

Vor

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

nach dem

$ find  -print0 | sed 's/\0/  /g'
../  3.lines./  4.lines./  2.lines./  1.lines$
Ярослав Рахматуллин
quelle
0

Verwenden Sie stdbuf (von coreutils ) und tr :

$ while true; do printf "ASDF\001"; sleep 0.5; done | stdbuf -o0 tr '\001' ' '
ASDF ASDF ASDF ASDF ASDF ...

Hinweis: stdbuf wird beim Ersetzen durch eine neue Zeile nicht benötigt, d. H tr '\001' '\n'

Oder benutze awk / gawk

$ while true; do printf "ASDF\001"; sleep 0.5; done | awk 'BEGIN{RS="\001"}; {printf "%s ", $0}'
ASDF ASDF ASDF ASDF ASDF ...

Dies funktioniert unabhängig vom Terminal. Weitere Informationen finden Sie unter Was ist Pufferung ? .

user19087
quelle