我在Tcl-Expect中编写了一个应用程序,它可以生成minicom和 通过串口发送和接收数据。有时我看到了 应用程序接收控制字符以及人类可读数据。 在互联网上搜索告诉我控制字符是 除了VT终端代码。但是我找不到解决方案 过滤掉终端代码。
我附加了预期缓冲区和实际缓冲区的样本。
预期: -
Microsoft Windows [Version 6.2.9200](c) 2012 Microsoft Corporation. All rights reserved. C:\Windows\system32>
实际: -
[1;1H[37m[40m [2;1H [3;1H [4;1H [5;1H [6;1H [7;1H [8;1H [9;1H [10;1H [11;1H [12;1H [13;1H [14;1H [15;1H [16;1H [17;1H [18;1H [19;1H [20;1H [21;1H [22;1H [23;1H [24;1H [1;1HMicrosoft Windows [Version 6.2.9200][2;1H(c) 2012 Microsoft Corporation. All rights reserved.[4;1HC:Windowssystem32>
答案 0 :(得分:1)
在进行初始匹配时,您不希望过滤掉它们;它们对确保您获得您想要的内容(提示/横幅)非常有用。但是,当你提取感觉时,你肯定做想要先将它们过滤掉。幸运的是,使用regsub
魔法很容易:
regsub -all {\u00AB\[[\d;]*[A-Za-z]} $expect_out(buffer) "" filtered
替换所有转义序列(ESC(\u00AB
)后跟一个括号,任意数量的数字和分号,以及一个字母)在Expect匹配缓冲区中(如果你有更好的候选者,选择其他的东西)空字符串,然后将结果存储在filtered
变量中。