我正在嘗試使用正則表達式解析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。我的目的是對行進行標準化,並刪除不必要的行,最終將它們作爲行插入到數據庫中進行查詢。
謝謝!