我正在尝试解析
的一些结果arp -a
和
Michael$ arp -a
? (10.254.0.1) at 0:1e:c9:bb:95:8c on en0 ifscope [ethernet]
? (10.254.0.2) at 0:1e:c9:bb:9a:8c on en0 ifscope [ethernet]
? (10.254.0.3) at 0:1e:c9:bb:9d:8c on en0 ifscope [ethernet]
如何运行bash脚本来运行arp -a并打印出每个返回的IP?
答案 0 :(得分:3)
对于GNU grep
(以及其他支持PCRE的其他人):
arp -a | grep -Po '.*?\(\K.*?(?=\).*)'
AWK:
arp -a | awk -F '[()]' '{print $2}'
sed
:
arp -a | sed 's/[^(]*(\([^)]*\)).*/\1/'
的Perl:
arp -a | perl -lne 'print $1 if m{.*?\(\K(.*?)(?=\).*)}'
答案 1 :(得分:1)
这是另一种解决方案:
arp -a | cut -f 2 -d ' '
如果您不想要括号:
arp -a | cut -f 2 -d ' ' | sed 's/[()]//g'
或者,将收集的IP地址转储到数组中:
ips=( $(arp -a | cut -f 2 -d ' ' | sed -r -e 's/[()]//g') )
访问:
echo ${ips[1]}
答案 2 :(得分:0)
你可以用awk:
来做arp -a | awk '{ gsub(/[()]/, "", $2); print $2; }'
答案 3 :(得分:0)
Pure Bash:
arp -a | while read -a line ; do
echo ${line[1]:1:-1}
done