在 PuTTY 中显示空字符

在 PuTTY 中显示空字符

服务器上运行的程序发送由空字符 ( ^A, SOH) 分隔的文本数据。当我通过 PuTTY 访问该服务器时,PuTTY 会跳过控制字符;它根本不显示它们在其“终端”屏幕上。这使得数据很难解释,因为无法区分一个字段在哪里结束,下一个字段在哪里开始。如果我打开 PuTTY 的会话日志档案在文本编辑器中,全部控制字符可见。有什么方法可以配置 PuTTY 来展示 某物当它收到控制字符时?(消息在标准FIX 协议,如果有人好奇的话。)

PuTTY 如何显示消息:

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

vi 如何显示相同的消息:(在 vi 中,^A以蓝色显示,使其更易于阅读。)

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

如果我将空值替换为空格,一眼就能理解:

14=2000 15=美元 17=801000096 20=0 22=1 29=1 30=O 31=158.927881 32=3200 37=0000000000 38=0 39=1 40=2

答案1

用可读的字符替换不可打印的字符。

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

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

答案2

使用标准缓冲区(从核心工具) 和tr

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

注意:用换行符替换时不需要 stdbuf,即tr '\001' '\n'

或者,使用awk/gawk

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

此功能适用于任何终端。请参阅什么是缓冲...了解更多信息。

相关内容