2015-12-04 19 views
0

匹配忽略線的某些部分我有足夠的所有共享相同的圖案,日期時間用戶文本日誌文件,如下所示:同時使用正則表達式/ grep的

2015-09-19 21:19:13  Daniel you should use gpt 

在上述例子中,「丹尼爾」只是一個隨機的用戶名,而後來的任何內容都是「Daniel」寫道的文本:「你應該使用gpt」。

我所追求的是一種能夠忽略用戶名(「Daniel」)左側的所有內容的方式,,包括Daniel,我永遠不想匹配用戶名,然後開始匹配我需要的內容使用正則表達式。我只需要在用戶寫下的實際TEXT內匹配。

這些日誌文件包含來自幾個不同IRC服務器的IRC聊天記錄/幾十個(如果不是數百個不同的房間),這些記錄是多年來記錄的。
所有這些日誌文件都位於同一文件夾下,沒有任何子文件夾,因此將grep應用於*將會執行。
我需要能夠grep匹配一個特定的用戶名(每次運行它將是一個不同的用戶名,我會編輯grep當然相應),其中該用戶名被提及(突出顯示)在聊天(線),但而不是當實際用戶是寫這一行的人時,只有當他人提到時。

以下應匹配,因爲不是丹尼爾其他用戶(雅各布)提到他(記住,雅各這裏只是一個用戶):

2015-09-19 21:19:13  Jacob you should read a book Daniel 

下應該不匹配,因爲它是誰提到用戶用戶:

2015-09-19 21:19:13  Daniel my name is also Daniel  

下不應該匹配,因爲相關用戶是不是在文本中:

2015-09-19 21:19:13  Daniel you should use gpt  

模式總是保持不變,只有可以改變的東西是日期&時間的值,USER的長度以及明顯的TEXT。

分隔符僅爲空格,如實例,這是一個實際複製&粘貼。

+0

是什麼字段之間的分隔符?嘗試提供更相關的示例輸入。另外,這裏的最終目標是什麼?最終的輸出會是什麼樣子? – fedorqui

+0

編輯過的主文章突出了我在使用grep和正則表達式的同時瀏覽這些日誌文件的實際需要,這可能比我最初描述的更簡單,謝謝! –

回答

1

與GNU的grep試試這個:

grep -Po '^([^ \t]+[ \t]+){3}\K.*' file 

輸出:

 
you should use gpt 
+1

@fedorqui:謝謝,我已經更新了我的答案。 – Cyrus