我已经建立了以下命令:
arp -a | grep <mac here> | grep -P '\((.*?)\)' -o
这应该返回特定Mac的IP地址。问题在于IP地址已返回,但周围带有()
。我需要没有()
的它们。知道我该如何解决吗?
当前:(192.168.187.136)
应该是192.168.187.136
答案 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}'