2012-08-10 45 views
1

我需要创建一个bash文件中搜索所有线路中的日志文件中包含该庆典提取IP并保存到内线文本文件

Aug 9 16:11:46 igs kernel: [ATTS] Caution: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=1.1.1.1 DST=192.168.0.100 LEN=33 TOS=0x00 PREC=0x00 TTL=121 ID=9690 DF PROTO=TCP SPT=601 DPT=12500 LEN=13 
Aug 9 16:11:46 igs kernel: [ATTS] Caution: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=2.2.2.2 DST=192.168.0.100 LEN=33 TOS=0x00 PREC=0x00 TTL=121 ID=9689 DF PROTO=TCP SPT=602 DPT=12502 LEN=13 
Aug 9 16:11:46 igs kernel: [ATTS] Caution: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=3.3.3.3 DST=192.168.0.100 LEN=33 TOS=0x00 PREC=0x00 TTL=121 ID=9691 DF PROTO=TCP SPT=600 DPT=12503 LEN=13 
Aug 9 16:11:46 igs kernel: [ATTS] Caution: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=1.1.1.1 DST=192.168.0.100 LEN=33 TOS=0x00 PREC=0x00 TTL=121 ID=9691 DF PROTO=TCP SPT=600 DPT=12503 LEN=13 

然后将解压后IP中的“SRC =”并保存将IP与名称“ip.list”外部文件而不是重复相同的IP

例输出ip.list

1.1.1.1 
2.2.2.2 
3.3.3.3 

回答

1

sed也可以这样做:

sed 's/.*SRC=\([0-9.]\+\).*/\1/' infile | sort -u 
4

您可以使用此awksort

awk '/Caution: IN=/ {print substr($11,5)}' infile | sort -u 

只是调整搜索字符串是你想要的(我已经使用"Caution: IN=")。

什么awk所做的是,对于每一个石灰匹配所搜索的字符串,它打印出的第五个字符开始第十一参数("SRC=aaa.bbb.ccc.ddd")(IP地址的第一位)。

然后,输出通过sort -u,首先排序然后删除重复的行。

输出是你所期望的:

pax> awk '/Caution: IN=/ {print substr($11,5)}' infile | sort -u 
1.1.1.1 
2.2.2.2 
3.3.3.3 
0

或用grepcoreutils

grep Caution: logfile | cut -d= -f5 | cut -d' ' -f1 | sort -u