繁体   English   中英

在这种情况下,如何在awk中使用正则表达式?

[英]How to use regex in awk for this case?

我正在使用nmap对网络进行扫描。

结果如下:

Nmap scan report for 30.142.41.52
Host is up.

PORT     STATE    SERVICE
8080/tcp open http-proxy

Nmap scan report for 51.136.230.94
Host is up.

PORT     STATE    SERVICE
8080/tcp filtered http-proxy

Nmap scan report for 58.188.208.42
Host is up.

PORT     STATE    SERVICE
8080/tcp filtered http-proxy

我只是想知道如何使用grep或awk仅保存State“打开”结果并将其保存在文本文件中?

我尝试过类似...

awk '{print $5}' | sort -n > IPs

但是它仅保存IP,那么如何在awk中使用正则表达式保存OPEN状态的IP?

预先感谢您,问候。 // terrisa

awk '/^Nmap/{ip=$5}; / open /{print ip}' file

要么

awk '$1=="Nmap"{ip=$5}; $2=="open"{print ip}' file

输出:

30.142.41.52

使用awk,可以使用您选择的字符串设置Record Separator(RS),这与Field Separator(FS)相同:

awk -F"\n" -v RS='Nmap scan report for ' '$5~/ open /{print $1}'

这样,awk逐行工作,而不是逐行工作(从每个“ Nmap扫描报告”到下一个); 并且Field Separator是换行符(这意味着第一个字段是IP,第五个字段是8080/tcp open http-proxy )。

请注意,如果使用gawk,则可以将每个IP存储在一个数组中,并使用asort函数,而不是通过管道将结果sort

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM