Grep

如何從 ifconfig 輸出中獲取 IP 地址

  • March 8, 2011

以下是我的 ifconfig 輸出

eth0      Link encap:Ethernet  
         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)
         Interrupt:28 Base address:0x2000 

eth1      Link encap:Ethernet  
         inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
     UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:36497 errors:0 dropped:0 overruns:0 frame:14515
         TX packets:44884 errors:1352 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:20781745 (20.7 MB)  TX bytes:17776225 (17.7 MB)
         Interrupt:17 Base address:0xc000 

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:16436  Metric:1
         RX packets:12 errors:0 dropped:0 overruns:0 frame:0
         TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0 
         RX bytes:720 (720.0 B)  TX bytes:720 (720.0 B)

virbr0    Link encap:Ethernet  
         inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0 
         RX bytes:0 (0.0 B)  TX bytes:4416 (4.4 KB)

vmnet1    Link encap:Ethernet 
         inet addr:192.168.185.1  Bcast:192.168.185.255  Mask:255.255.255.0

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

vmnet8    Link encap:Ethernet  
         inet addr:192.168.207.1  Bcast:192.168.207.255  Mask:255.255.255.0

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

如何使用grep提取每張網卡對應的IP地址?

那可能嗎?如何實現?

$ ip -o addr show | awk '/inet/ {print $2, $3, $4}'
lo inet 127.0.0.1/8
lo inet6 ::1/128
eth0 inet 192.168.0.1/24
eth0 inet6 fe80::2a0:feed:dead:beef/64

當我看到這樣的文章時,我忍不住想提高我的 perl oneliner 腳本編寫能力。這是第一次 hacky 嘗試:

$ /sbin/ifconfig | \
perl -ane "(\$n)=(/^(\S+)/) and print \"\$n: \"; print (/addr:(\S+)/) and print \"\n\" if /inet/"
eth0: 192.168.0.11
lo: 127.0.0.1

這可能會收緊很多,它有很多問題,比如它不處理 ipv6 地址等。

引用自:https://serverfault.com/questions/243965