我正在尝试使用正则表达式解析 Oracle 跟踪文件。我选择的语言是 C#,但我选择在这个练习中使用 Ruby 来熟悉它。
日志文件有些可预测。大多数行(具体为 99.8%)匹配以下模式:
# [Timestamp] [Thread] [Event] [Message]
# TIME:2010/08/25-12:00:01:945 TID: a2c (VERSION) Managed Assembly version: 2.102.2.20
# TIME:2010/08/25-14:00:02:398 TID:1a60 OpsSqlPrepare2(): SELECT * FROM MyTable
line_regex = /^TIME:(\S+)\s+TID:\s*(\S+)\s+(\S+)\s+(.*)$/
但是,在日志中的一些地方有很多复杂的查询,由于某种原因,跨越了几行:
关于这些条目需要指出的两件事是它们似乎会导致日志文件中的某种损坏,因为它们以不可打印的字符结尾,然后突然下一个条目在同一行开始。
由于这显然排除了逐行捕获数据,我认为下一个最佳选择是匹配单词“TIME:”与“TIME:”的下一个实例或文件末尾之间的所有内容。我不确定如何使用正则表达式来表达这一点。
有没有更有效的方法?我需要解析的日志文件将超过 1.5GB。我的意图是规范化这些行,并删除不必要的行,最终将它们作为行插入数据库中以进行查询。
谢谢!