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
に置き換えました
私の目的は、inetIP以外のすべてを削除することです。したがって、次のように表示されます。
10.16.x.xx
10.16.x.xx
これは可能ですか?コマンドを可能な限りシンプルに保ちながら、複数のOS(10.9/10.10/10.11)で機能するようにします。
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
も返されます。それを回避するには、次のようにします。
ifconfig -a | awk '$1=="inet" && $5=="broadcast"{print $2}'
これをテストするためのMacはありませんが、一般的に、ifconfig
は廃止されてip
になります。代わりにこれを使用することを検討することをお勧めします。
ip addr show | awk -F'[ /]*' '$2=="inet" && $5=="brd"{print $3}'
はい、どうぞ:
ifconfig -a | grep -e "inet [0-9]" | cut -d" " -f 2
与えられた答えのほとんどはMac OS Xではうまく機能しません!できる最も簡単なことは、cut
またはawk
を使用することです。
すべてのinet IPを取得するには:
ifconfig -a | grep -oP 'inet \K\S+'
10.16ファミリーを取得するには:
ifconfig -a | grep -oP 'inet \K10\.16\S+'
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
次のようなPerl
コマンドを使用できます
Perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'
これは、正規表現を使用してinetの後のIPを検索し、それを出力します。出力をパイプするだけです。
例:
ifconfig -a | grep 10.16 | Perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'
Linuxでテスト済み:ローカルホストを除くすべてのIPを取得:
ifconfig -a | grep "inet addr:" | grep -v "127.0.0.1" | sed -e "s#addr:##g" | awk '{print $2}'