2012-08-10 47 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