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
4

3 回答 3

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不够接近,但我想。

于 2013-04-10T21:23:15.730 回答
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
于 2013-04-10T21:29:47.753 回答
0

这很容易sed

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

或者,如果您想就地更改文件:

sed -i '' '$!N;/\n$/d' filename
于 2013-04-10T21:41:40.580 回答