取出IP地址的多种方法

[root@localhost ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:17:55:07  
          inet addr:192.168.2.144  Bcast:192.168.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fe17:5507/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20984231 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4784138 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1893181237 (1.7 GiB)  TX bytes:377974699 (360.4 MiB)


[root@localhost ~]# ifconfig  eth0 | grep "inet addr:"| cut -d ":" -f2| cut -d " " -f1
192.168.2.144

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

[root@localhost ~]# ifconfig  eth0 | grep "inet addr:"| awk -F "[: ]" '{print $13}'        #多分隔符 :和空格
192.168.2.144

[root@localhost ~]# ifconfig eth0 | grep "inet addr"| awk -F "[: ]+" '{print $4}'
192.168.2.144

[root@localhost ~]# ifconfig eth0 | sed -n '2p' | awk -F "[ :]+" '{print $4}'
192.168.2.144

[root@localhost ~]# ifconfig eth0 | awk -F "[ :]+"  ' NR==2 {print $4}'        #NR==2表示取第二行
192.168.2.144

[root@localhost ~]# grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0| cut -d "=" -f2
192.168.2.144

[root@localhost ~]# echo ---1:-----2| awk -F '[-:]+' '{print $1}'

[root@localhost ~]# echo  ---1:-----2| awk -F '[-:]+' '{print $2}'
1                        
[root@localhost ~]# echo  ---1:-----2| awk -F '[-:]+' '{print $3}'
2

[root@localhost ~]# ifconfig eth0 | sed -n '/inet addr:/p'| sed 's#^.*addr:##g'| sed 's#  Bc.*$##g'
192.168.2.144

[root@localhost ~]# ifconfig eth0 | sed -n 's#^.*addr:\(.*\)  Bcast.*$#\1#gp'
192.168.2.144
\1 :表示取出前面()里面的值
-n:取消默认输出
p:打印输出


[root@localhost ~]# stat b.txt
  File: `b.txt'
  Size: 8             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 2621510     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-07-07 15:43:02.858337762 +0800
Modify: 2016-07-07 15:43:01.435337769 +0800
Change: 2016-07-07 15:43:01.435337769 +0800
[root@localhost ~]# stat b.txt | sed -n '4p' | awk -F "[(/]" '{print $2}'
0644



老男孩linux培训第三节课程课前第考试三题,问题如下:
3.请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)。
解答:
说明:此题解答方法已经给大家讲解了不下15种,还可以有很多,在这里给大家着重讲下awk的技巧用法,希望大家能多重视老师的思路、思维过程,不过过分关注问题的答案,以便达到学一通十的效果。
方法一【此法为绿叶】:如果用awk来处理的话,一般的同学可能会用下面的办法实现:
[root@oldboy ~]# ifconfig eth0|grep 'inet addr'|awk -F ":" '{print $2}'|awk '{print $1}'
10.0.0.162
小结:这个方法是常规方法,很好。但是我们有没有更简单的awk实现方法呢?往下看。
方法二【此法为小红花】:通过awk同时使用多个分隔符来实现:
[root@oldboy ~]# ifconfig eth0|grep 'inet addr'|awk -F '[ :]' '{print $13}'
192.168.1.186
提示:本题通过使用空格或冒号来做分隔符,然后一次性取出结果,就是空格或冒号可以看做是同一个分隔符。
小结:这个方法很方便吧,同学们可以多用,选取包含IP地址行的特殊关键字'inet addr’过滤然后,使用awk以空格和:同时做分隔符,然后取出需要的内容。
      本答案的最大缺点就是计算$n的时候很费劲,因为inet前面有多个空格,查到$13,真是不容易,如此看来从实现时间上可能还不如第一个方法快呢?那好引出我们今天的关键答案案例。
方法三【大红花出场】:通过awk同时使用多个分隔符,然后通过正则匹配多个分隔符的方法来实现:
[root@oldboy ~]# ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}'
10.0.0.185
我们来说明下这个简单易用的好办法:
提示:本题NR是行号,分隔符+号匹配,[]里一个或多个任意一个分隔符,这里就是匹配一个或多个冒号或空格。
1)awk -F 后面跟分隔符‘[空格:]+’,其中[空格:]多分隔符写法,意思是以空格或冒号做分隔,后面的"+"号是正则表达式,意思是匹配前面空格或冒号,两者之一的1个或1个以上。
2)NR==2和sed -n "2p",相当,意思都是选择第几行,例:
[root@oldboy ~]# ifconfig eth0|awk NR==2
          inet addr:10.0.0.185  Bcast:10.0.0.255  Mask:255.255.255.0
3)指定awk -F '[ :]+'分隔符后,不同字符串被分隔的列依次为:
 
             inet    addr    10.0.0.185      Bcast:10.0.0.255  Mask:255.255.255.0       
第一列    第二列    第三列    第四列      后面忽略不计。    
4)整个答案awk部分意思是,通过NR==2取出第二行,然后,通过-F '[-:]+多分隔符正则匹配,然后通过{print $4}打印出第四列 !谢谢杨瑞同学的答案啊, 懒得写了,所以让你总结下。嘿嘿,看到后别怪老师啊。
5)掌握了理论要去实践验证才是科学严谨的学习态度,好,来几个例子实践说话吧。
[root@oldboy ~]# echo ---1:----2|awk -F '[-:]+' '{print $2}'    
1
[root@oldboy ~]# echo ---1:----2|awk -F '[-:]+' '{print $3}'    
2
[root@oldboy ~]# echo ---1:::::2|awk -F '[-:]+' '{print $3}'   
2
最后把我的这些年的运维感悟送给大家:
老男孩语录⑧⑧-把简单的技术学到极致就是高手
工作中多用简单的技术,实现较复杂的架构,这样不但能减少维护成本,还减少出故障问题的几率,
同时降低修复故障所花费的时间,更避免流失处理的人无人接替维护的尴尬局面发生。
运维工作中:简单、易用,是使用命令,选择软件和解决方案的基本原则,不是越复杂越好。


分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS