如何从Shell中的arp命令获取IP

时间:2019-09-03 12:53:35

标签: bash shell

我已经建立了以下命令:

arp -a | grep <mac here> | grep -P '\((.*?)\)' -o

这应该返回特定Mac的IP地址。问题在于IP地址已返回,但周围带有()。我需要没有()的它们。知道我该如何解决吗?

当前:(192.168.187.136) 应该是192.168.187.136

5 个答案:

答案 0 :(得分:3)

我认为arp已被弃用,ip neighbor是合适的替代品。由于ip n输出没有括号,因此您也可以避免此问题

ip n | grep <mac here> | cut -d' ' -f1

答案 1 :(得分:1)

您可以使用sed删除第一个和最后一个字符:

arp -a | grep <mac here> | grep -P '\((.*?)\)' -o | sed 's/^|\(.*\)|$/\1/'

此外,在BASH 4.2及更高版本上:

ip=$(arp -a | grep <mac here> | grep -P '\((.*?)\)' -o)
echo "${ip:1:-1}"

答案 2 :(得分:0)

在一个命令中使用sed

arp -a | grep <mac here> | grep -P '\((.*?)\)' -o | sed 's/^|\(.*\)|$/\1/'

答案 3 :(得分:0)

由于您已经在使用ImageView

grep -P

arp -a | grep <mac here> | grep -oP '\(\K[^)]*' 是PCRE元字符,意思是“丢弃到目前为止匹配的字符串”,因此您将检查结果前是否有括号而不输出,并且否定的类\K将匹配直到下一个括号为止。

如果mac地址出现在IP之前,您也可以融合两个[^)]

grep

答案 4 :(得分:0)

使用ip neighboor和(posix)awk:

ip n | awk -v mac='<mac here>' 'mac{print $1}'

或使用GNU awk和arp

arp -a | awk -F'[()]' -v mac='<mac here>' '$0 ~ mac{print $2}'