我正在尝试使用不断输出格式化文本的程序进行调试,例如:
r/c 0123456789ABCDEF
00: 0000011100000000
01: 0000011100000000
02: 0000011100000000
03: 0000011100000000
04: 0000011100000000
05: 0000011100000000
06: 0000011100000000
07: 0000000000000000
08: 0001000000000000
09: 0000000000000000
0A: 0000000000000000
0B: 0000000000000000
0C: 0000000000000000
0D: 0011000000000000
r/c 0123456789ABCDEF
00: 0000011100000000
01: 0000011100000000
02: 0000011100000000
03: 0000011100000000
04: 0000011100000000
05: 0000011100000000
06: 0000011100000000
07: 0000000000000000
08: 0001000000000000
09: 0000000000000000
0A: 0000000000000000
0B: 0000000000000000
0C: 0000000000000000
0D: 0011000000000000
...etc
它显示了键盘矩阵的输出,所以我想看看当我按下正在测试的键盘上的键时数字是如何变化的。
问题是它在控制台上飞得如此之快,只是一大堆文字。我想在每个组之间插入一个清晰的屏幕,这样我实际上可以看到我按下的键在矩阵中的位置。我正在运行的程序是 sudo ./hid_listen
.
我想实时查看更改,就像我将此输出通过管道传输到文件中一样,很难用数千行文本分辨出我按下特定键的确切位置。我在想像top
这样不断刷新的东西,但当然要简单得多。
您可以将命令通过管道传输到awk,以便在每次出现空白行(新组的开头)时强制清除屏幕:
sudo ./hid_listen | awk '/^$/{system("clear")} 1'
或者,您可以使用此命令在每次出现r/c
行时插入clear
命令:
sudo ./hid_listen | awk '/^r/c /{system("clear")} 1'
我自己找到了,
sudo ./hid_listen | sed -e 's/^$/'$(echo -en " 33c")'/'
可能是特定于终端的,但它对我有用。 echo -en " 33c
变成 ESC-c,清除屏幕。虽然我没有尝试过,但anubhava的答案看起来也像我想要的。
请不要接受这个作为你的答案,因为它完全基于@anubhava的优秀建议。我只是认为这可能会对您有所帮助,因为您说有数千行令人困惑的文本。
基本上,它和他的一样,除了它记住看到的最后一行(在变量"x"中),并且只在它改变时打印输出 - 所以你没有那么多东西要涉足:
yourcommand | awk -F: '/^r/c /{system("clear");print $0;x=""}$2!=x{print $0;x=$2}'
输出:
r/c 0123456789ABCDEF
00: 0000011100000000
07: 0000000000000000
08: 0001000000000000
09: 0000000000000000
0D: 0011000000000000