搜索日志文件

时间:2011-06-20 15:07:39

标签: c++ excel search vim

  

可能重复:
  Searching using Regex in VIM or elsewhere

我正在搜索一个巨大的~600 Mb文件,找到一个长度为7个十六进制值的特定模式。问题是

  1. '模式'可以在下一行和
  2. 有几条寻址线。
  3. 我通过摆脱所有回车来摆脱问题1,但即使价值在下一行,我仍然面对我不知道如何搜索地址线。以下是一个例子:
    0x000001A0: 36 5B 09 76 99 31 55 09 78 99 34 51 49 BF E0 03
    0x000001B0: 28 0B 0A 03 0B E0 07 28 0B 0A 03 0B 49 58 09 35

    例如:我希望能够找到模式49 BF E0 03 28 0B 0A,该模式跨越上面的第1行和第2行但我不能只是定期搜索它,因为开头是0x000001B0:任何建议或c ++代码或excel想法将有所帮助。我现在正在使用VIM打开这个大文件,使用excel不会打开整个文件。

2 个答案:

答案 0 :(得分:1)

Python,只需读入行,拆分,查看第一部分,将十六进制连接成一个字符串,然后搜索。像这样的东西会起作用:

hex = ""
for each line in lines:
    tmp = line.split() // split on whitespace
    hex += tmp[1:] // grab everything after address

if hex.contains(pattern):
    # do something

或者使用正则表达式,但是你得到了基本的想法。

答案 1 :(得分:0)

您可以使用循环缓冲区。

  1. 打开文件
  2. 阅读一行
  3. 阅读地址并放弃
  4. 读取第一个值并将其放入缓冲区
  5. 读取下一个值,并抛出缓冲区的最后一个值(std :: list可能对此有利)
  6. 检查缓冲区是否包含模式
  7. 循环5直到行尾
  8. 循环2直至文件末尾