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/'

Perl:

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 に答える