使用三剑客(grep,sed,awk)获取IP地址
例一:将系统用ifconfig命令列出的信息中ens33的IP地址打印出来
自用方法1(简单实用):
ifconfig ens33 | grep 'inet' | awk -F " " '{print $2}' | sed -n '1p'
- ifconfig ens33 获取网卡信息
- grep 'inet' 过滤inet的行
- awk -F " " '{print $2}' 以空格为分隔符,获取第二列
- sed -n '1p' 打印第一列
方法2:
[root@Centos /]# ifconfig eth0 |grep "inet addr"
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
首先将带有IP地址行过滤打印出来,然后再进行过滤取出IP地址
[root@Centos /]# ifconfig eth0 |grep "inet addr"|awk -F '[ :]+' '{print $4}'
192.168.1.2
以空格和:做为分隔符,+代表前面多个重复的分隔符识为一个,将第四列打印
方法3:
[root@Centos /]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:AA:CA:2B
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feaa:ca2b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7005 errors:0 dropped:0 overruns:0 frame:0
TX packets:3095 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:709421 (692.7 KiB) TX bytes:454116 (443.4 KiB)
[root@Centos /]# ifconfig eth0|awk -F '[ :]+' NR2 取整个内容第二行
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
[root@Centos /]# ifconfig eth0|awk -F '[ :]+' 'NR2 {print $4}' 打印第四列
192.168.1.2
方法4:
[root@Centos /]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:AA:CA:2B
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feaa:ca2b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7271 errors:0 dropped:0 overruns:0 frame:0
TX packets:3244 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:733402 (716.2 KiB) TX bytes:473258 (462.1 KiB)
[root@Centos /]# ifconfig eth0|sed -n 2p 将第二行打印
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
[root@Centos /]# ifconfig eth0|sed -n 2p|sed 's#^.*addr:# #g'
192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
将以空格.*(前任意字符)addr:开头的内容替换成空输出
[root@Centos /]# ifconfig eth0|sed -n 2p|sed 's#^.addr:# #g'|sed 's# Bcast.$# #g' 将以两空格Bcast.*(后任意字符)结尾的内容替换成空输出
192.168.1.2
方法5
[root@Centos /]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:AA:CA:2B
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feaa:ca2b/64 Scope:Link
UP BROACAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7723 errors:0 dropped:0 overruns:0 frame:0
TX packets:3434 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:776543 (758.3 KiB) TX bytes:493886 (482.3 KiB)
[root@Centos /]# ifconfig eth0|sed -n 's#^.addr:(.) Bcast.*$#\1#gp'
192.168.1.2
将需要的内容匹配到()中,然后将()中的内容打印出来
例二 过滤ip a 打印出的IP中ens33的地址
自用方法:
ip address | grep ens33 | sed -n '2p' | awk -F " " '{print $2}' | awk -F "/" '{print $1}'
- grep ens33 过滤ens33这行
- sed -n '2p' 获取第二行
- awk -F " " '{print $2}' 以空格符为分割打印第二列,此过滤后会显示IP/掩码,所以仍需过滤
- awk -F "/" '{print $1}'` 以/为分割胡打印第一列IP即可