単一コマンド(パイプライン)でインターフェイスIPアドレスを印刷する

単一コマンド(パイプライン)でインターフェイスIPアドレスを印刷する

設定されている場合次の出力を提供します。

   eth0      Link encap:Ethernet  HWaddr 4c:87:0e:z3:e7:11  
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

    lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:35767 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35767 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:5053027 (5.0 MB)  TX bytes:5053027 (5.0 MB)

vmnet1    Link encap:Ethernet  HWaddr 60:80:66:m0:00:01  
          inet addr:192.168.139.1  Bcast:192.168.139.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fec0:1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

現在、このような出力が必要です。

eth0   
wlan0   127.0.0.1
vmnet1  192.168.139.1

だからコマンドを実行します。

ifconfig | awk '/encap|inet addr/{  print }'

しかし、天候に応じて2つの行をマージする必要があり、次の行にipaddressパターンが含まれているため、今は詰まっています。シェルスクリプトを使用すると問題を解決できますが、単純な単一のコマンドソリューションが必要です。 awkにforループがありますが、次の行を期待して一致させてからコンソールに印刷するのは私にとって難しいことです。

それとも、このようなことを達成するための簡単なコマンド/フラグはありますか?

Route コマンドはトリック (awk フィールド抽出!!) を実行しているように見えますが、非アクティブなインターフェイスは一覧表示されません。

ベストアンサー1

GNU/Linux を実行する場合:

for DEV in /sys/class/net/*; do
    printf "%-10s %s\n" ${DEV##*/} $(ip addr show ${DEV##*/} | \
      sed -rne '/inet/s:\s+inet\s+([0-9.]+).*:\1:gp');
done

またはifconfig要件の場合:

for DEV in /sys/class/net/*; do
    printf "%-10s %s\n" ${DEV##*/} $(ifconfig ${DEV##*/} | \
      sed -rne '/inet adr/s/\s+inet adr:([0-9.]+).*/\1/gp');
done

それは作り出す

eth0       192.168.10.34
eth1       
lo         127.0.0.1
...

必要ですがiproute2

おすすめ記事