获取linux主机的IP地址
问题描述
在很多软件配置过程中,都需要设置ID信息,通常我选择使用系统配置的eth0网卡的IP地址信息,比如salt-minion-id,在通过cobbler批量安装操作系统时,会给操作系统自定义或者DHCP配置IP地址信息,然后在之后的配置过程中,如何将该IP地址取出来,配置到minion_id文件中,也是一个小问题。
正则表达式
最近看了一下正则表达式,想通过正则表达式的方式,从命令行中,获取到IP地址信息。不带任何其他信息的。
- 获取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的掩码和其他信息。
- 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地址了。
- 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这么展示。