从文本文件中 Grep 和过滤 IP

从文本文件中 Grep 和过滤 IP

我有一个日志文件,但我想从文件中提取特定的 ip,日志文件如下所示

在此输入图像描述

对于日志文件,我只想获取每行 IP 的第一部分,我尝试下面的每个命令都会得到一个结果,其中有很多我不想要的 IP ( grep -E -o "([0-9] {1,3}[.]){3}[0-9]{1,3}" < honeylog.txt ) > 输出.txt

输出.txt如下所示

在此输入图像描述

但我只想要的IP是第一部分,只有192.168.80.12有任何方法能够使每一行的grep命中第一个结果,然后直接跳到第二行并再次启动grep?

答案1

尝试按如下方式配置 grep:grep -Po '(?<= - )[^ ]*'

我想这取决于你使用的系统类型...-Po 无法在 mac osx 上工作,但在 centos 上工作正常:

[rust@JBLGSMR001 ~]$ cat data.txt
2017-06-07-17:44:45.5903 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5904 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5905 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5906 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5907 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5908 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5909 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
[rust@JBLGSMR001 ~]$ cat data.txt | grep -Po '(?<= - )[^ ]*' >> output.txt
[rust@JBLGSMR001 ~]$ cat output.txt
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12

相关内容