web-dev-qa-db-ja.com

端末コマンド| grep 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に置き換えました

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

10.16.x.xx
10.16.x.xx

これは可能ですか?コマンドを可能な限りシンプルに保ちながら、複数のOS(10.9/10.10/10.11)で機能するようにします。

5
user565934

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}'
8
terdon

はい、どうぞ:

ifconfig -a | grep -e "inet [0-9]" | cut -d" " -f 2

与えられた答えのほとんどはMac OS Xではうまく機能しません!できる最も簡単なことは、cutまたはawkを使用することです。

1
FarazX

すべてのinet IPを取得するには:

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

10.16ファミリーを取得するには:

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

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
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"'
0
Wayne_Yux

Linuxでテスト済み:ローカルホストを除くすべてのIPを取得:

ifconfig -a | grep "inet addr:" | grep  -v "127.0.0.1" | sed -e "s#addr:##g" | awk '{print $2}'
0
mdev