搜索包含带有5行块的nmap扫描的文件,并且仅当其中2行符合要求时才搜索

时间:2013-10-11 05:21:52

标签: file sed awk grep lines

任何人都知道如何grep文件并查找2行信息并仅输出这些行。我正在我们的网络10.1.1.x - 10.1.254.x上执行nmap扫描,我正在寻找端口22打开的所有IP。 Nmap创建我的文件,但它包含具有以下3种条目的条目

Nmap scan report for 10.1.0.1
<br>Host is up 93.1s latency).
<br>Scanned at (Date) (Time)
<br>Port    State     Service
<br>22/tcp  filtered  ssh 

Nmap scan report for 10.1.0.2
<br>Host is up 93.1s latency).
<br>Scanned at (Date) (Time)
<br>Port    State     Service
<br>22/tcp  open  ssh 

Nmap scan report for 10.1.0.3
<br>Host is up 93.1s latency).
<br>Scanned at (Date) (Time)
<br>Port    State     Service
<br>22/tcp  open  ssh 

Nmap scan report for 10.1.0.4
<br>Host is up 93.1s latency).
<br>Scanned at (Date) (Time)
<br>Port    State     Service
<br>22/tcp  filtered  ssh 

我希望grep文件并返回第1行和第5行,并且只有第5行包含open。

我试过了:grep -e '10.1' -e 'open' file.txt
这就是我想要的东西,但是每一行都返回第1行和第5行

我试过了:sed -e '/10.1./,/open/!d' file.txt
但这与使用:cat file.txt

相同

还尝试了awk '/10/ && /open/' file.txt
但不返回任何东西

任何建议

3 个答案:

答案 0 :(得分:0)

使用gnu awk,您可以执行此操作

awk '/10\.1/ && /open/' RS="\n\n" file
Nmap scan report for 10.1.0.2
<br>Host is up 93.1s latency).
<br>Scanned at (Date) (Time)
<br>Port    State     Service
<br>22/tcp  open  ssh
Nmap scan report for 10.1.0.3
<br>Host is up 93.1s latency).
<br>Scanned at (Date) (Time)
<br>Port    State     Service
<br>22/tcp  open  ssh

这会将记录大小从一行更改为一行。然后你就可以得到你想要的东西。您还需要转义.,否则它意味着任何字符,而不是.

要搜索端口,您可以像这样添加:

awk '/10\.1/ && /open/ && /22\/tcp/' RS="\n\n" file

这是一个适用于大多数awk版本

的版本
awk '/10\.1/ {p=1} p {s=s"\n"$0} /filtered/ {p=0;s=""} /open/ {print s,$0;p=0;s=""}' file

答案 1 :(得分:0)

您可以尝试gnu awk

如果每5行用空行分隔

,则可以使用awk '/10\.1\./ && /open/' RS="" file

答案 2 :(得分:0)

$ awk 'BEGIN{RS="";FS=OFS="\n"} $5~/open/{ print $1, $5 }' file
Nmap scan report for 10.1.0.2
<br>22/tcp  open  ssh
Nmap scan report for 10.1.0.3
<br>22/tcp  open  ssh

或者如果您愿意:

$ awk 'BEGIN{RS="";ORS="\n\n";FS=OFS="\n"} $5~/open/{ print $1, $5 }' file
Nmap scan report for 10.1.0.2
<br>22/tcp  open  ssh

Nmap scan report for 10.1.0.3
<br>22/tcp  open  ssh