如何从ifconfig输出grep的IP地址

以下是我的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 

    唉,当我看到这样的post的时候,我无法抗拒地尝试提高我的perl脚本编写能力 。 这是第一次哈希尝试:

     $ /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地址等

    这是我如何做到的:

     ETHERADD=$(/sbin/ifconfig |grep -e ^[az] |grep -v lo | awk '{ printf $1 FS}') for i in $ETHERADD do IP=$(/sbin/ifconfig $i | grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' | head -1) printf "%-16s%-42s*\n" "IP $i:" "$IP" done 

    ip addr show | grep inet | awk -F " " '{print $NF"|"$2}'

    这是我用的

     #!/bin/bash interfaces=$(/sbin/ifconfig |grep -e ^[az] | awk '{ printf $1 " "}') for i in $interfaces do addr=$(/sbin/ifconfig $i | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}') addr6=$(/sbin/ifconfig $i | grep 'inet6 addr:' |sed 's/ *//g'| cut -d' ' -f3 | cut -d'/' -f1) echo "$i inet4 $addr inet6 $addr6" done 

    怎么样

     ifconfig -a|awk '{print $1 " " $2}'|egrep -w 'Link|inet'|sed 's/ Link//'|sed 's/inet addr://' 

    在你的输出中,返回

     eth0 eth1 192.168.1.2 lo 127.0.0.1 virbr0 192.168.122.1 vmnet1 192.168.185.1 vmnet8 192.168.207.1 

    为了我。

    可怕的丑陋,只有IPv4的好处:

     ifconfig | egrep "^[az]|inet " | sed -e "s/ [ ]*Link.*/@/" -e "s/.*inet addr://" -e "s/ .*/#/" | tr -d '\012' | tr '@' ' ' | tr '#' '\012' 

    ifconfig | grep addr> myipaddr.txt

    不知道这是多么可移植,但你可以通过hostname命令避免整个sed / grep / awk / perl等, -i-I (我build议hostname -I ):

      -i, --ip-address Display the network address(es) of the host name. Note that this works only if the host name can be resolved. Avoid using this option; use hostname --all-ip-addresses instead. -I, --all-ip-addresses Display all network addresses of the host. This option enumerates all configured addresses on all network interfaces. The loopback interface and IPv6 link-local addresses are omitted. Contrary to option -i, this option does not depend on name resolution. Do not make any assumptions about the order of the output. 

    例如:

     [kbrandt@alpine: ~/] hostname -I 192.168.1.100 10.1.0.42