任何人都知道如何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
但不返回任何东西
任何建议
答案 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