去除由空行包围的线(Remove a line surrounded by blank lines)

2019-11-02 01:01发布

基本上,我有一个从nmap的输出,这给了我一个IP,然后那底下开放端口的列表,之后是一个空行。 我过滤掉了,我不想再(端口grep -v http等),但我不能想出如何删除没有以下端口的IP addesses。

有没有办法用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

Answer 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


Answer 2:

下面的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 ,但足够接近,我想。



Answer 3:

这是一个在很容易sed

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

或者,如果你想改变的地方文件:

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


文章来源: Remove a line surrounded by blank lines
标签: linux sed awk