2012-06-18 18 views
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每個回?

回答

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]} 
0

可以使用awk完成這件事:

arp -a | awk '{ gsub(/[()]/, "", $2); print $2; }' 
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(.*?)(?=\).*)}' 
+0

我怎麼會只佔據第一位,並存儲在IP的變量? – Michael

+0

@邁克爾:你沒有那個作爲你的問題的一部分。 'var = $(arp -a | awk -F'[()]''{print $ 2; exit}''將是一種方法 –

+0

糟糕,在結尾應該有一個右括號:'var = $(arp -a | awk -F'[()]''{print $ 2; exit}')' –

0

純擊:

arp -a | while read -a line ; do 
    echo ${line[1]:1:-1} 
done