
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}'
そうでない場合は、次に始まるすべての行を見つけてinet
2番目のフィールドを印刷できます。
ifconfig -a | awk '$1=="inet"{print $2}'
しかし、これも127.0.0.1
localhostを返します。これを防ぐには、次のようにします。
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"'