如何使用grep从日志文件中提取IP地址和日期/时间字符串?

creerow

我有一个看起来像这样的日志文件:

May 25 05:34:16 server sshd[1203]: Received disconnect from 192.0.2.2 port 39102:11
May 25 05:34:16 server sshd[1203]: Disconnected from 192.0.2.1 port 39102 

现在,我想使用grep在开始时提取所有IP地址和日期/时间字符串。我已经知道如何获取ips:

grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' /log.txt

以及日期/时间:

grep -o '[A-Z][a-z][a-z] [0-3][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]' /log.txt

但是我不知道如何以如下格式同时获取两者:

May 25 05:34:16 192.0.2.1

我读过类似的东西:

 grep -oE 'match1|match2' /log.txt

但这似乎不起作用。

P ...

使用,在一行中打印两个匹配更加容易awk,下面将打印日期(通过打印$1,$2,$3和所有有效IP地址)

gawk  '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/,a);split(a[0],b,".")} b[1]<=255&& b[2]<=255 && b[3]<=255 && b[4]<=255 &&length(a[0]){print $1,$2,$3, a[0]}' log_file
May 25 05:34:16 192.0.2.2
May 25 05:34:16 192.0.2.1

说明:首先使用match函数捕获格式为的所有字符串,digit.digit.digit.digit并将其存储在名为“ a的数组中,然后将捕获的array(a分隔为dot(.)字符,并检查每个字符串是否为<=255以确保IP地址有效。

注意:这里使用GNU awk。

另请注意,您提到的正则表达式也会打印无效的IP地址(例如:)333.222.555.666

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章