从终端中的命令中提取结果

iam*_*00t 3 shell-script text-processing nmap

从终端中的命令中提取结果

nmaplocal network使用以下命令对我的进行了扫描:

nmap -sP 192.168.1.*
Run Code Online (Sandbox Code Playgroud)

当我运行该命令时,我得到的内容与此类似:

Nmap scan report for macbook.att.net (192.168.1.21)
Host is up (0.019s latency).
MAC Address: 71:DF:4B:44:80:F1 (Apple)
Nmap scan report for lenovo.att.net (192.168.1.15)
Host is up (0.045s latency).
MAC Address: 21:EA:7D:84:08:A1 (Liteon Technology)
Run Code Online (Sandbox Code Playgroud)

如何运行该命令,但只输出如下结果:

1. Apple (192.168.1.21)
2. Liteon Technology (192.168.1.15)
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的

到目前为止,我已尝试使用grep,但效果不如我预期。我只需要知道如何从 nmap 扫描中获取结果并将其组织在一个列表中,其中包含“( )”和 IP 地址之间的内容。

αғs*_*нιη 6

您可以尝试使用“awk”命令,如下所示,

nmap -sP 192.168.1.* | awk -F"[)(]" '/^Nmap/{Nmap=$(NF-1); C+=1} /^MAC Address/{print C"."$(NF-1) "("Nmap")" }' 
Run Code Online (Sandbox Code Playgroud)

输出,

1. Apple (192.168.1.21)
2. Liteon Technology (192.168.1.15)
Run Code Online (Sandbox Code Playgroud)

解释:

  • 随着 awk 的-F打开,你告诉 'awk' 你的输入是用(和/或分隔的),正如我们在分隔符组中指定的那样-F"[)(]"

  • '/.../{...} /.../{...}',它的awk的脚本主体,这在你的情况下,它只会先运行/^Nmap/{Nmap=$(NF-1); C+=1},或第二/^MAC Address/{print C"."$(NF-1) "("Nmap")" }或没有,我们只指定了如果运行这两个条件部分的输入字符串或行启动(^这是起跑线锚和指向的开始一条线/记录)Nmap(或在第二部分MAC Address)模式。找到的任何匹配项都将运行其大括号内的代码{...}

第一部分在做什么?
如上所述,如果找到匹配,则将倒数第二个字段(NF指向最后一个字段(或其根据定义的 delim$NF及其值在记录中返回的字段数)值放入变量Nmapwith 中$(NF-1);这C+=1是一个计数器标志变量,我们用于在输出中使用 ID 列表在最后计算匹配数

第二部分在做什么?
与上面相同,但是当找到匹配时^MAC Address,然后首先打印计数器C值,打印一个点.,然后打印匹配行的倒数第二个字段,最后打印 paranteces 内的“Nmap”值,这是前一个匹配行的 IP