![](/img/trans.png)
[英]Get a part of a line with the matching string from a paragraph using perl 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.