【发布时间】:2014-12-31 22:52:41
【问题描述】:
我有一个包含设备驱动程序失败示例的大量日志文件。驱动程序应该提供来自客户端应用程序读取的缓冲区的数据。驱动程序在读取之前和之后记录缓冲区中的数据量,并以 512 字节块的形式将数据传输到客户端。日志文件中的多行随机散布着大量垃圾数据。下面是一个简短的例子或一个正常的工作案例。
Before Transfer 1: Available 512 bytes
... junk data
After Transfer 1: Available 0 bytes
... junk data
Before Transfer 2: Available 512 bytes
... junk data
After Transfer 2: Available 0 bytes
在错误情况下,它看起来像这样(传输编号仅来自特定示例;问题并不总是发生在传输 #35 上):
Before Transfer 34: Available 512 bytes
... junk data
After Transfer 34: Available 0 bytes
... junk data
Before Transfer 35: Available 512 bytes
... junk data
After Transfer 35: Available 512 bytes
因此,我正在尝试匹配一个多行查询,其中单次传输在“之前”和“之后”日志记录语句中报告了相同数量的“可用”。
我试过这个::%s/Before Transfer.* 512 bytes\._*After Transfer.* 512 bytes,它有助于找到一些问题,但数量可能是 1024、256 或“之前”中 256 字节的倍数和“之后”日志记录语句。
此外,这个查询似乎突出显示了 VIM 中超过一半的文件缓冲区。我假设这是因为它在其他查询中找到匹配的查询(即:嵌套结果),因为我没有为它提供只匹配 corresponding "Before"/"After" 实例的方法日志文件中的数字。
我想设置一个正则表达式,通过每个匹配“之前”和“之后”日志行,并查看数据值(字节数)是否与“之前”相同“ 之后”。如果满足这两个条件,就正则表达式搜索查询而言,它是“匹配”。对于我或多或少手动解析的文件,所需的输出是这样的:
Before Transfer 35: Available 512 bytes
After Transfer 35: Available 512 bytes
Before Transfer 105: Available 256 bytes
After Transfer 105: Available 256 bytes
Before Transfer 220: Available 512 bytes
After Transfer 220: Available 512 bytes
Before Transfer 250: Available 2048 bytes
After Transfer 250: Available 2048 bytes
如何创建这样的查询?
谢谢。
【问题讨论】:
标签: regex vim replace sed grep