awk 获取ip地址的方法分享(awk实例)

发布时间:2019-12-27编辑:脚本学堂
分享下用awk获取ip地址的方法,提供了三种方法供参考,有需要的朋友看看哦。

问题描述:
执行命令取出linuxeth0IP地址(用cut,或用awk,sed命令)。

方法一,用awk来处理:
 

复制代码 代码示例:
[root@oldboy ~]# ifconfig eth0|grep 'inet addr'|awk -F ":" '{print $2}'|awk '{print $1}'
10.0.0.162
 

小结:这个方法是常规方法。

方法二,通过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