使用管道命令配合正则表达式提取Linux下指定网卡的IP地址

我不想直接把命令贴出来并告诉你:“这样做就对了”,下面我会一点点带你把具体的命令分析出来。
一般情况下在Linux下查看网卡IP地址一般都用什么命令?是下面这一条,对吧。

[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:70:91:62
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe70:9162/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:58059 errors:0 dropped:0 overruns:0 frame:0
TX packets:13478 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4629291 (4.4 MiB) TX bytes:2488172 (2.3 MiB)
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:260 errors:0 dropped:0 overruns:0 frame:0
TX packets:260 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:35416 (34.5 KiB) TX bytes:35416 (34.5 KiB)

命令返回了好长一大串信息,可以发现ifconfig命令默认是返回所有网卡的信息的,也包括本地换回口,那如何指定其只返回某一张网卡的信息呢?可以写成下面这样。
ifconfig 接网卡名
本实验中,我只获取eth0的网卡信息。

[root@localhost ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:70:91:62
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe70:9162/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:58090 errors:0 dropped:0 overruns:0 frame:0
TX packets:13494 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4631879 (4.4 MiB) TX bytes:2490700 (2.3 MiB)

观察上面的输出信息,会发现,IP地址是在“inet addr:”这个关键字后面输出的,那我们的第一步就是使用管道命令把含有这个关键字的行给提取出来。

[root@localhost ~]# ifconfig eth0 | grep "inet addr:"
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0

接下来要怎么做呢?
观察上方的输出,可以发现其是由好几个部分通过空格符来组合在一起的,这样我们就可以使用awk命令来过滤出第二个字段。

[root@localhost ~]# ifconfig eth0 | grep "inet addr:" | awk '{print $2}'
addr:192.168.1.11

已经离成功很近了,现在只需要去除多余的“addr:”这个字符串即可,直接在字符串中删除一段字符串这个命令我没找到,那就曲线救国呗,咱将排除“addr:”这个字符串的字符串输出出来就好(有点绕口)。数一下“addr:”这个字符串一共有五个字符,那咱们就从第六个字符开始输出,一直输出到行尾就可以整理出IP地址啦!

[root@localhost ~]# ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -c 6-
192.168.1.11