Bash获取和解析结果

时间:2012-06-18 12:18:26

标签: bash parsing

我正在尝试解析

的一些结果
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 个答案:

答案 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