通过删除空行包围的行 [英] Remove a line surrounded by blank lines

查看:130
本文介绍了通过删除空行包围的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上,我有一个从nmap的输出,这给了我一个IP,然后开放的端口下面,之后是一个空行列表。我已筛选出的口,我不想再(的grep -v HTTP ,例如),但我无法弄清楚如何删除IP addesses说有没有下列端口。

有没有办法使用sed?要做到这一点

示例数据:

 为1.1.1.1的Nmap扫描报告
3389 / TCP打开MS-TERM-SERV
5357 / TCP开放未知
5432 / TCP开放的PostgreSQL
8080 / TCP打开http代理
49152 / TCP开放未知
49153 / TCP开放未知
49154 / TCP开放未知
49155 / TCP开放未知为2.2.2.2的Nmap扫描报告为3.3.3.3的Nmap扫描报告
80 / TCP打开http
443 / TCP开放HTTPS
6646 / TCP开放未知
8000 / TCP打开http-ALT
49152 / TCP开放未知
49153 / TCP开放未知
49154 / TCP开放未知
49156 / TCP开放未知
49157 / TCP开放未知


解决方案

通过 AWK 你可以简单地做的awk'$ 2'ORS ='\\ ñ\\ n'FS ='\\ n'RS =文件

  $的awk'$ 2'ORS ='\\ n \\ n'FS ='\\ n'RS =文件
为1.1.1.1的Nmap扫描报告
3389 / TCP打开MS-TERM-SERV
5357 / TCP开放未知
5432 / TCP开放的PostgreSQL
8080 / TCP打开http代理
49152 / TCP开放未知
49153 / TCP开放未知
49154 / TCP开放未知
49155 / TCP开放未知为3.3.3.3的Nmap扫描报告
80 / TCP打开http
443 / TCP开放HTTPS
6646 / TCP开放未知
8000 / TCP打开http-ALT
49152 / TCP开放未知
49153 / TCP开放未知
49154 / TCP开放未知
49156 / TCP开放未知
49157 / TCP开放未知

如果额外换行符加到$ p中$ pvious脚本文件的末尾是接着一个问题使用这种替代:

 的awk'/ ^的Nmap / {H = $ 0; I = NR;接下来} NR == I + 1 {如果($ 0){打印H,P = 1}其他p = 0} p'文件

Basically, I have output from nmap, which gives me an IP and then a list of open ports underneath that, followed by a blank line. I have filtered out the ports that I don't want anymore (grep -v http, for example), but I can't figure out how to remove the IP addesses that have no following ports.

Is there a way to do this with sed?

Sample data:

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

解决方案

With awk you can simply do 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

If the extra newline added to the end of file in previous script is a problem then use this alternative:

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

这篇关于通过删除空行包围的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆