web-dev-qa-db-ja.com

PuTTYにヌル文字を表示する

サーバー上で実行されているプログラムは、ヌル文字(^A、SOH)。 PuTTYを介してそのサーバーにアクセスすると、PuTTYは制御文字をスキップします。 「ターミナル」画面にはまったく表示されません。これにより、あるフィールドが終了する場所と次のフィールドが開始する場所を区別できないため、データの解釈が非常に困難になります。テキストエディタでPuTTYのセッションlogfileを開くと、allコントロール文字が表示されます。制御文字を受け取ったときにPuTTYをdisplaysomethingに構成する方法はありますか? (メッセージは標準 FIXプロトコル で、興味があれば。)

PuTTYがメッセージを表示する方法:

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

Viが同じメッセージを表示する方法:(viでは、^Aは青色で表示され、読みやすくなっています。)

^ A14 = 2000^ A15 = USD^ A17 = 801000096^ A20 = 0^ A22 = 1^ A29 = 1^ A30 = O^ A31 = 158.927881^ A32 = 3200^ A37 = 0000000000^ A38 = 0^ A39 = 1^ A40 = 2

Nullをスペースに置き換えると、一目でわかります。

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

3
Shouvik Sayef

印刷できない文字を読みやすいものに置き換えてください。

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

$ find  -print0 | sed 's/\0/  /g'
../  3.lines./  4.lines./  2.lines./  1.lines$

stdbuf(fromcoreutils)およびtr

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

注:改行、つまりtr '\001' '\n'に置き換える場合、stdbufは必要ありません。

または、awk/gawkを使用します

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

これは、端末に関係なく機能します。詳細については、 バッファリングとは... を参照してください。

0
user19087