获取系统的IP地址

获取linux主机的IP地址


问题描述

在很多软件配置过程中,都需要设置ID信息,通常我选择使用系统配置的eth0网卡的IP地址信息,比如salt-minion-id,在通过cobbler批量安装操作系统时,会给操作系统自定义或者DHCP配置IP地址信息,然后在之后的配置过程中,如何将该IP地址取出来,配置到minion_id文件中,也是一个小问题。

正则表达式

最近看了一下正则表达式,想通过正则表达式的方式,从命令行中,获取到IP地址信息。不带任何其他信息的。

  1. 获取IP地址信息

通过ip addr show eth0和ifconfig eth0,查看eth0网卡信息。

[root@salt-master ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:90:36:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.64.131/24 brd 192.168.64.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe90:369d/64 scope link 
       valid_lft forever preferred_lft forever

我们要获取的是inet地址,192.168.64.131,只是一个地址,不需要/24的掩码和其他信息。

  1. sed截取

主要的实现方式是,通过sg替换,将不需要的内容匹配出来,然后替换为空,然后保留最后的信息。

sed -n 取消默认输出,只显示sed之后的结果

sed 's###g' 查找,替换

sed p 打印编辑后的内容, 's###gp'

[root@salt-master ~]# ip addr show eth0|sed -n 's#.*inet ##gp'
192.168.64.131/24 brd 192.168.64.255 scope global eth0

匹配inet之前的部分,然后全部替换为空,然后打印出来

上面就已经截取出来IP地址部分了,但是后面还有一些信息不需要。再匹配一次

[root@salt-master ~]# ip addr show eth0|sed -n 's#.*inet ##gp'|sed -n 's#/.*##gp'
192.168.64.131

匹配掩码/和后面所有内容,然后替换为空,打印出来,这样就显示出来IP地址了。

  1. sed后向引用

sed有一个方法,后向引用,将sed匹配的内容,在替换部分打印出来,用的是正则表达式中的()。以上么截取IP地址为例,通过后向引用,获取IP地址,具体如下:

[root@salt-master ~]# ip addr show eth0|sed -nr 's#.*inet (.*)/.*#\1#gp'
192.168.64.131

这个解释起来比较简答,首先是获取eth0的全部输出,然后匹配 .*inet (.)/. ,这就匹配到第二行字段,然后括号里面匹配到的是IP地址信息,然后通过后向引用\1,直接展示出来。

如果括号比较多,可以以此类推,\2 \3这么展示。

上一篇:linux安装git


下一篇:如何将PHP中的IP地址作为二进制字符串进行比较?