NIC(eth0)のアドレス部分だけを取得する


 ネットワークのアドレス

ifconfigでipを表示すると複数のNICのipが取得できます。
例えば下記のような感じです。
この中からifconfigでeth0のNICアドレスを取得するにはどうするのかを考えます。

$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.28.99.150  netmask 255.255.240.0  broadcast 172.28.111.255
        inet6 fe80::215:5dff:xxx:xxxx  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:90:90:41  txqueuelen 1000  (Ethernet)
        RX packets 742  bytes 149376 (149.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1216 (1.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0のアドレスをgrepする

ifconfigでgerpしてipアドレスだけを取得するには下記のようにします。

ifconfig eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'

ifcongit eth0 で取得したいNICの情報を表示させます。
もし別のNICのIPアドレスが取得したければethXXといった感じでナンバーを指定します。
(これで通じるのだろうか。。。。)
その後パイプで結果を渡して正規表現でgrepしてます。
oはマッチしたとこだけ取るオプションでPはPerl形式の正規表現で、
この組み合わせで行の抽出と切り出しがマッチした部分のができますね。