在 GREP 和 AWK 命令期间收到一堆 (不完整)

在 GREP 和 AWK 命令期间收到一堆 (不完整)

当我使用此命令时:

arp -a | grep "192.168.0.19" | awk '{ print $4 }'

我收到了这些结果... ff:ff mac 地址是我想要的,但为什么我得到的是 (incomplete)s 字段?我想要的只是从我要 grep 的特定 IP 获取的 MAC 地址。

ff:ff:ff:ff:ff:ff
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)

答案1

显然您最近尝试访问192.168.0.190192.168.0.191、… 192.168.0.199(注意有 10(incomplete)个)。无法访问这些地址,但内核缓存仍会暂时保留其不完整的条目。

我想如果你这么做了arp -a | grep "192.168.0.19"你就能自己发现这一点。

我的arp -a(在 Ubuntu 14.04.5 LTS 上)将 IP 地址放在括号中。尝试:

arp -a | grep "(192.168.0.19)" | awk '{ print $4 }'

或者您可以使用以下选项过滤掉(incomplete)s :-vgrep

arp -a | grep "192.168.0.19" | grep -v "(incomplete)" | awk '{ print $4 }'

哎呀!后一个版本可能会返回您不期望的主机的 MAC 地址。想想如果192.168.0.19条目不完整而例如192.168.0.190条目完整会发生什么。我将其留在这里是为了教育目的。

grep -v可能有用(请注意 IP 地址旁边的括号又回来了):

arp -a | grep "(192.168.0.19)" | grep -v "(incomplete)" | awk '{ print $4 }'

这样,您便可以获得所需的 MAC 地址,如果此 IP 没有完整的条目,则无法获得任何内容。

最后我arp可以仅返回有关特定 IP 的信息: arp -a 192.168.0.19。这是最好的开始方式。整个命令可能如下所示:

arp -a 192.168.0.19 | grep -v "(incomplete)" | awk '{ print $4 }'

又出错了!到处都是陷阱。如果的主机名192.168.0.19是这样的,最后一个命令将不会返回任何输出foobar-(incomplete)。改进版本:

arp -a 192.168.0.19 | awk '{ print $4 }' | grep -v "(incomplete)"

相关内容