2013-04-10 72 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