深刻浅出linux三剑客之awk必杀技一例

缘起:上完第三节培训课后,同窗们群内讨论氛围至关的好,那么就再给你们一点惊喜,但愿你们继续加油努力,达到大家的第一阶段薪水目标。linux

老男孩linux培训第三节课程课前第考试三题,问题以下:正则表达式

3.请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)。架构

解答:运维

说明:此题解答方法已经给你们讲解了不下15种,还能够有不少,在这里给你们着重讲下awk的技巧用法,但愿你们能多重视老师的思路、思惟过程,不过过度关注问题的答案,以便达到学一通十的效果。ide

方法一【此法为绿叶】:若是用awk来处理的话,通常的同窗可能会用下面的办法实现:学习

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

10.0.0.162字符串

小结:这个方法是常规方法,很好。可是咱们有没有更简单的awk实现方法呢?往下看。it

方法二【此法为小红花】:经过awk同时使用多个分隔符来实现:ast

[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

最后把个人这些年的运维感悟送给你们:

老男孩语录⑧⑧-把简单的技术学到极致就是高手

工做中多用简单的技术,实现较复杂的架构,这样不但能减小维护成本,还减小出故障问题的概率,

同时下降修复故障所花费的时间,更避免流失处理的人无人接替维护的尴尬局面发生。

运维工做中:简单、易用,是使用命令,选择软件和解决方案的基本原则,不是越复杂越好。缘起:上完第三节培训课后,同窗们群内讨论氛围至关的好,那么就再给你们一点惊喜,但愿你们继续加油努力,达到大家的第一阶段薪水目标。

老男孩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

最后把个人这些年的运维感悟送给你们:

老男孩语录⑧⑧-把简单的技术学到极致就是高手

工做中多用简单的技术,实现较复杂的架构,这样不但能减小维护成本,还减小出故障问题的概率,

同时下降修复故障所花费的时间,更避免流失处理的人无人接替维护的尴尬局面发生。

运维工做中:简单、易用,是使用命令,选择软件和解决方案的基本原则,不是越复杂越好。

相关文章
相关标签/搜索