1

我正在尝试解析一些结果

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?

4

4 回答 4

3

对于 GNU grep(以及其他一些支持 PCRE):

arp -a | grep -Po '.*?\(\K.*?(?=\).*)'

AWK:

arp -a | awk -F '[()]' '{print $2}'

sed

arp -a | sed 's/[^(]*(\([^)]*\)).*/\1/'

珀尔:

arp -a | perl -lne 'print $1 if m{.*?\(\K(.*?)(?=\).*)}'
于 2012-06-18T12:44:56.513 回答
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]}
于 2012-06-18T13:28:55.670 回答
0

您可以使用 awk 来完成:

arp -a | awk '{ gsub(/[()]/, "", $2); print $2; }'
于 2012-06-18T12:38:36.630 回答
0

纯重击:

arp -a  | while read -a line ; do
  echo ${line[1]:1:-1}
done
于 2012-06-18T14:02:57.277 回答