使用Bash从每行日志文件中提取IP地址

时间:2015-07-07 11:34:07

标签: linux bash awk sed

有没有办法使用bash / sed / awk从每行日志文件中提取IP地址以显示IP主机对话或连接尝试?

日志文件示例:

TheDetailsItem.Name = Details[0].Name;
TheDetailsItem.Developer = Details[0].Developer;
etc...

必需的输出,列出IP对话/连接尝试:

110.98.8.41 10.98.35.28

10.10.2.5 10.9.15.2

10.128.4.201 10.198.2.1

我尝试使用grep删除IP:

*Teardown TCP connection -1948864210 for Node14:110.98.8.41 to Net_N:10.98.35.28 duration 0:02:01 bytes 0 SYN Timeout
Built outbound TCP connection -1948863670 for Net11:10.10.2.5 (10.10.2.5 to Net01:10.9.15.2 (10.9.15.2)
Deny tcp src Node22:10.128.4.201/2254 dst outside:10.198.2.1/5560 by access-group "111"*

但输出只列出单个IP地址而不是逐行IP对话

感谢任何帮助..

2 个答案:

答案 0 :(得分:2)

你可以这样做:

octet='\<(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?)\>'
ip="$octet\\.$octet\\.$octet\\.$octet"
grep -Eo "$ip" file | paste - -

或者,使用已经发明的轮子

perl -MRegexp::Common -lne '$,=" "; print /$RE{net}{IPv4}/g' file

答案 1 :(得分:1)

要打印彼此相邻的IP,请尝试以下命令:

cat first | grep -o '[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\}' | awk 'NR%2{printf $0"\t";next;}1'