本文转自老男孩博客:http://oldboy.blog.51cto.com/2561410/950730
取出本机的Ip:
方法一【此法为绿叶】:
如果用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
最后这个为什么$2是1而不是$1,因为---1:----2中-作为分隔符而且第一个就是分隔符所以分隔符前的$1为空格
转载于:https://blog.51cto.com/fantefei/982032