簡體   English   中英

使用regex / grep匹配時忽略行的某些部分

[英]Ignore certain part of line while matching using regex/grep

我有很多日志文件,它們共享相同的模式,即DATE TIME USER TEXT,如下所示:

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

在上面的示例中,“ Daniel”只是一個隨機用戶名,其后出現的是“ Daniel”寫道:“您應該使用gpt”的文本。

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

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

以下內容應匹配,因為除Daniel以外的一個USER(Jacob)都提到了他(請記住,Jacob這里只是一個USER):

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

以下內容不匹配,因為是USER提到了USER:

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

以下內容不匹配,因為相關的USER不在TEXT中:

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

模式始終保持不變,唯一可以更改的是日期和時間,USER的長度以及顯然是TEXT的值。

分隔符僅在示例中是空格,這是實際的復制和粘貼。

嘗試使用GNU grep:

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

輸出:

you should use gpt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM