端末コマンド| IPアドレスクエリ

端末コマンド| IPアドレスクエリ
ifconfig -a | grep  10.16
     inet 10.16.x.xx netmask 0xffffff00 broadcast 10.16.x.xxx
     inet 10.16.x.xx netmask 0xffffff80 broadcast 10.16.x.xxx

私は数字を次に置き換えました。x

私の目標は、inet IP以外のすべてを削除することです。したがって、次のように表示されます。

10.16.x.xx
10.16.x.xx

可能ですか?コマンドをできるだけ単純に保ち、複数のオペレーティングシステム(10.9/10.10/10.11)で動作するようにします。

答え1

さて、あなたのIPが次から始まることを知っているなら10.16

ifconfig -a | grep -oP '\b10\.16\.[0-9.]+\b'

grepまたはサポートしていない場合、-Pまたは-o

ifconfig -a | awk '/10\.16\./ && /inet/{print $2}'

そうでない場合は、次に始まるすべての行を見つけてinet2番目のフィールドを印刷できます。

ifconfig -a | awk '$1=="inet"{print $2}'

しかし、これも127.0.0.1localhostを返します。これを防ぐには、次のようにします。

ifconfig -a | awk '$1=="inet" && $5=="broadcast"{print $2}'

これをテストするMacはありませんが、通常、次のifconfigために使用されなくなりましたip

ip addr show | awk -F'[ /]*' '$2=="inet" && $5=="brd"{print $3}'

答え2

ip addr showロゴと共に使用されます-o。たとえば、私が接続しているインターフェイスのすべてのIPv4アドレスは次のようになります。

$ ip -4 -o addr show  | awk '{print $4}'                                                                                 
127.0.0.1/8
10.42.0.1/24
192.168.0.78/24
10.0.3.1/24

10.次に始まる特定のアドレスのみを取得できます。

$ ip -4 -o addr show  | awk '/10\./{print $4}'                                                                           
10.42.0.1/24
10.0.3.1/24

CIDR表記法は次のように削除できます。

$ ip -4 -o addr show  | awk '/10\./{gsub(/\//," ");print $4}'                                                            
10.42.0.1
10.0.3.1

答え3

すべてのinet IPを取得します。

ifconfig -a | grep -oP 'inet \K\S+'

10.16 ファミリーを入手するには:

ifconfig -a | grep -oP 'inet \K10\.16\S+'

答え4

perlたとえば、-コマンドを使用できます。

perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'

正規表現を使用してIPを見つけます。イントラネットそして印刷してください。出力をパイプで接続するだけです。

例:

ifconfig -a | grep  10.16 | perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'

関連情報