我正在使用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,只保存状态"打开"结果并将其保存在文本文件中?
我尝试过像......
awk '{print $5}' | sort -n > IPs
但它只保存IP,那么如何在awk中使用正则表达式来保存处于OPEN状态的IP?
提前谢谢你, 问候。 // terrisa
答案 0 :(得分:1)
awk '/^Nmap/{ip=$5}; / open /{print ip}' file
或
awk '$1=="Nmap"{ip=$5}; $2=="open"{print ip}' file
输出:
30.142.41.52
答案 1 :(得分:0)
使用awk,您可以使用您选择的字符串设置记录分隔符(RS),对于字段分隔符(FS)也是如此:
awk -F"\n" -v RS='Nmap scan report for ' '$5~/ open /{print $1}'
这样,awk不是逐行工作,而是逐块工作(从每个'Nmap扫描报告'到'下一个);并且字段分隔符是换行符(这意味着第一个字段是IP,第五个字段是行8080/tcp open http-proxy
)。
请注意,如果您使用gawk,则可以将每个IP存储在一个数组中并使用asort函数,而不是将结果传递给sort
。