TCL日志记录 - 日志文件中不需要的行

时间:2014-07-29 13:59:08

标签: vim tcl

在这里你可以看到“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;”是一种我从未听说过的特殊角色。

1 个答案:

答案 0 :(得分:0)

您正在通过某种程序进行分页,从而获取该日志文件。 (它可能埋没在内部;这些事情会发生。)分页程序在页面末尾打印这样的消息:

<SPACE> for next page, <CR> for next line, A for all, Q to quit

<SPACE>只是一些带有人类可读文字的消息的一部分;这是七个非常普通的人物。但是,跟随它的^H更有趣,因为它们确实是退格字符;它是再次删除前面的字符以便为下一行实际输出让路的地方。

最简单的方法(假设您正在使用 - 或者可以轻松访问 - Unix / Linux系统)是通过col -bcol程序以{{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相同。)