2013-04-10 25 views
0

基本上,我從nmap得到了一個輸出,它給了我一個IP,然後是下面的一個開放端口列表,後面跟着一個空行。我已經過濾了我不再需要的端口(例如,grep -v http),但我無法弄清楚如何刪除沒有以下端口的IP地址。刪除被空行包圍的行

有沒有辦法用sed來做到這一點?

的樣本數據:

Nmap scan report for 1.1.1.1 
3389/tcp open ms-term-serv 
5357/tcp open unknown 
5432/tcp open postgresql 
8080/tcp open http-proxy 
49152/tcp open unknown 
49153/tcp open unknown 
49154/tcp open unknown 
49155/tcp open unknown 

Nmap scan report for 2.2.2.2 

Nmap scan report for 3.3.3.3 
80/tcp open http 
443/tcp open https 
6646/tcp open unknown 
8000/tcp open http-alt 
49152/tcp open unknown 
49153/tcp open unknown 
49154/tcp open unknown 
49156/tcp open unknown 
49157/tcp open unknown 
+0

您可以顯示您想要過濾的輸出示例嗎? – 2013-04-10 21:03:04

回答

1

隨着awk,你可以簡單地做awk '$2' ORS='\n\n' FS='\n' RS= file

$ awk '$2' ORS='\n\n' FS='\n' RS= file 
Nmap scan report for 1.1.1.1 
3389/tcp open ms-term-serv 
5357/tcp open unknown 
5432/tcp open postgresql 
8080/tcp open http-proxy 
49152/tcp open unknown 
49153/tcp open unknown 
49154/tcp open unknown 
49155/tcp open unknown 

Nmap scan report for 3.3.3.3 
80/tcp open http 
443/tcp open https 
6646/tcp open unknown 
8000/tcp open http-alt 
49152/tcp open unknown 
49153/tcp open unknown 
49154/tcp open unknown 
49156/tcp open unknown 
49157/tcp open unknown 

如果額外的換行符添加到先前的腳本文件的末尾是那麼一個問題,請使用此替代:

awk '/^Nmap/{h=$0;i=NR;next}NR==i+1{if($0){print h;p=1}else p=0}p' file 
1

下面的awk代碼段爲我工作的虛擬文件我這樣創建:

22.22.22.22 
dflkhhdfjhdk 
tslkdkffhdskjgh 

33.33.33.33 
tddfgkghdfkj 

44.44.44.44 

55.55.55.55 
ghdkjghdkfjhjdfhg 
iuryweiu 
kjwhkjfh 

66.66.66.66 

77.77.77.77 
cxlvbclbnc 

並運行此直通以下awk程序:

awk '/[0-9][0-9].[0-9][0-9].[0-9][0-9].[0-9][0-9]/ { K=$0; next } 
K { if(length) print K "\n" $0; K=""; next } 
1 
END { if(K) print K }' infile > outfile 

之後outfile的內容如下:

22.22.22.22 
dflkhhdfjhdk 
tslkdkffhdskjgh 

33.33.33.33 
tddfgkghdfkj 

55.55.55.55 
ghdkjghdkfjhjdfhg 
iuryweiu 
kjwhkjfh 

77.77.77.77 
cxlvbclbnc 

我用來匹配IP地址的正則表達式需要修改以符合您的特定情況,但我認爲您已經介紹了它。

希望這會有所幫助。我知道這不是sed,但我認爲足夠接近。

0

這是很容易在sed

sed '$!N;/\n$/d' filename 

或者如果您想要更改文件:

sed -i '' '$!N;/\n$/d' filename