在这里你可以看到“cat tcl.log”的输出:
Discovered serial numbers for slot 1 olt 1:
sernoID Vendor Serial Number sernoID Vendor Serial Number
5 ZNTS 032902A6
这就是它在VIM中的表现:
^MDiscovered serial numbers for slot 1 olt 1:
^MsernoID Vendor Serial Number sernoID Vendor Serial Number
^M<SPACE> for next page, <CR> for next line, A for all, Q to quit^H ^H^H ^H^...
5 ZNTS 032902A6
我不介意^ M和^ H字符,我知道如何摆脱它们。问题在于,出于某种原因,我的C ++程序(与cat不同)看到的行以“&lt; SPACE&gt;”开头。我能做些什么呢?我正在使用fstream库来读取日志文件,我希望它忽略我提到的那一行。我试着做这样的事情:
std::ofstream logFinal("logFinal");
std::ifstream log("tcl.log");
std::string temp;
while (std::getline(log, temp)){
if (temp.find("SPACE") != std::string::npos){
temp = "";
}
logFinal << temp << std::endl;
}
但由于某种原因,它在temp变量中找不到任何“SPACE”。它看起来像“&lt; SPACE&gt;”是一种我从未听说过的特殊角色。
答案 0 :(得分:0)
您正在通过某种程序进行分页,从而获取该日志文件。 (它可能埋没在内部;这些事情会发生。)分页程序在页面末尾打印这样的消息:
<SPACE> for next page, <CR> for next line, A for all, Q to quit
<SPACE>
只是一些带有人类可读文字的消息的一部分;这是七个非常普通的人物。但是,跟随它的^H
更有趣,因为它们确实是退格字符;它是再次删除前面的字符以便为下一行实际输出让路的地方。
最简单的方法(假设您正在使用 - 或者可以轻松访问 - Unix / Linux系统)是通过col -b
(col
程序以{{1}提供该日志文件选项,做退格消除)。从shell会话中查看这个小的cut-n-paste:
-b
(bash$ echo -e 'abc\b\b\bdef'
def
bash$ echo -e 'abc\b\b\bdef' | od -c
0000000 a b c \b \b \b d e f \n
0000012
bash$ echo -e 'abc\b\b\bdef' | col -b | od -c
0000000 d e f \n
0000004
应与日志文件中的\b
相同。)