0

任何人都知道如何 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 以及第 1 行和第 5 行

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

也试过awk '/10/ && /open/' file.txt
但没有返回任何东西

有什么建议么

4

3 回答 3

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
于 2013-10-11T05:29:32.790 回答
0

你可以试试gnu awk

awk '/10\.1\./ && /open/' RS="" file如果每 5 行被空行分割,您可以使用

于 2013-10-11T06:03:26.110 回答
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
于 2013-10-12T01:49:45.090 回答