使用regex / grep

时间:2015-12-04 16:04:25

标签: regex grep pattern-matching match

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

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

在上面的例子中," Daniel"只是一个随机的用户名,随后发生的是“#Daniel; Daniel"写道:"你应该使用gpt"。

我所追求的是一种能够忽略用户名左侧的所有内容的方式(" Daniel"),包括Daniel ,我永远不会想要匹配用户名,然后开始匹配我需要使用正则表达式。我只需要在USER写的实际TEXT中匹配。

这些日志文件包含来自多个不同IRC服务器的IRC-Chat日志/数十个(如果不是数百个)不同的房间,这些日志已记录多年。 所有这些日志文件都在同一个文件夹下,没有任何子文件夹,因此将grep应用于*将会执行  我需要能够grep匹配一个特定的用户名(每次运行它将是一个不同的用户名,我当然会相应地编辑grep),其中在聊天(行)中提到(突出显示)用户名,但不是实际的用户是写行的人,只有当他人提到时。

以下内容应该匹配,因为Daniel以外的用户(雅各布)提到了他(请记住,雅各布这里只是一个用户):

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    

模式始终保持完整,只有可以改变的是日期和时间的值。用户的时间,长度以及TEXT。

分隔符只是在示例中的空格,它是实际的复制和粘贴。

1 个答案:

答案 0 :(得分:1)

尝试使用GNU grep:

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

输出:

you should use gpt