获取系统的IP地址

Posted bobo137950263

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取系统的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网卡信息。

[[email protected] ~]# 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‘

[[email protected] ~]# ip addr show eth0|sed -n ‘s#.*inet ##gp‘
192.168.64.131/24 brd 192.168.64.255 scope global eth0

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

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

[[email protected] ~]# ip addr show eth0|sed -n ‘s#.*inet ##gp‘|sed -n ‘s#/.*##gp‘
192.168.64.131

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

  1. sed后向引用

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

[[email protected] ~]# ip addr show eth0|sed -nr ‘s#.*inet (.*)/.*#\1#gp‘
192.168.64.131

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

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

以上是关于获取系统的IP地址的主要内容,如果未能解决你的问题,请参考以下文章

linux系统自动获取ip地址

linux 系统获取当前登陆ip地址的几种方法

Linux如何自动获取IP地址及配置静态IP地址上网

电脑为何不能自动获取IP地址?

获取系统的IP地址

自动获取ip地址失败怎么解决