我有很多日志文件都共享相同的模式,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。
分隔符只是在示例中的空格,它是实际的复制和粘贴。
答案 0 :(得分:1)
尝试使用GNU grep:
grep -Po '^([^ \t]+[ \t]+){3}\K.*' file
输出:
you should use gpt