说明:本文为老男孩linux培训某节课前考试试题及答案分享博文内容的一部分,也是独立成题的,你可以点下面地址查看全部的内容信息。
http://oldboy.blog.51cto.com/2561410/791245
特别说明:答题的思路技巧可能比做题本身更重要,这也是老男孩特别教导学生的学习方法。
3.请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)。
解答:
某学生的答案:方法新颖。
grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0|cut -f 2 -d=
提示:
[root@oldboy ~]# grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0|cut -d= -f2
10.0.0 .179
[root@oldboy ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADDR|cut -d= -f2
10.0.0 .179
法1:cut
[root@oldboy oldboy]# ifconfig eth0|grep 'inet addr'|cut -d ":" -f2|cut -d " " -f1
10.0.0 .162
法2:awk
[root@oldboy oldboy]# ifconfig eth0|grep 'inet addr'|awk -F ":" '{print $2}'|awk '{print $1}'
10.0.0 .162
说明:这里的awk同上文的cut,但是比cut功能强大的多,-F ":" 中的-F表示指定分割符:,如果不加-F默认就是空格分割符。后面的写法是两个单引号中间是一定一对大括号,然后大括号里是print $n,这个n就是前面使用分割符后的第几个字段,如第一字段就是$1,第二个就是$2,下面再举一例:
[root@oldboy oldboy]# cat test.txt
oldboy zhaoyue xiangpan #→以空格分,就是3个字段,$1为oldboy ,$2为zhaoyue ,$3为xiangpan
[root@oldboy oldboy]# echo oldboy zhaoyue xiangpan >test.txt
[root@oldboy oldboy]# awk '{print $1}' test.txt
oldboy
[root@oldboy oldboy]# awk '{print $3}' test.txt
xiangpan
提示:有关awk的用法,在老男孩的课程当中会经常用到,希望大家可以积累此命令的用法,可以看到一个学一个,多记案例,而不是记枯燥的文字说明。记得去awk --help和man awk。
法3:sed(正则)
[root@oldboy oldboy]# ifconfig eth0|grep 'inet addr' #→通过关键字inet addr过滤出需要的行。
inet addr: 10.0.0 .162 Bcast:10.0.0.255 Mask:255.255.255.0 #→目标是取出10.0.0.162
[root@oldboy oldboy]# ifconfig eth0|grep 'inet addr'|sed 's/^.*addr://g'
10.0.0.162 Bcast: 10.0.0 .255 Mask:255.255.255.0
#→这里是使用sed的替换语法加正则,^.*addr:表示匹配任意字符的开头,中间也是任意字符,结尾为addr:的字符串,即匹配“ inet addr:”,通过sed 's/^.*addr://g'将其替换为空,也就是下面的结果。
[root@oldboy oldboy]# ifconfig eth0|grep 'inet addr'|sed 's/^.*addr://g'|sed 's/Bcast:.*$//g'
10.0.0 .162
#→这里是使用sed的替换语法加正则,Bcast:.*$部分表示匹配以Bcast:开头,以多个任意字符结尾,即匹配“Bcast: 10.0.0 .255 Mask:255.255. 255.0 ” 通过sed 's/Bcast:.*$//g'将其替换为空,也就是下面的结果。
技巧提示:
处理目标(获取的字符串如上文的ip)前的字符串一般用以..开头(^.*)来匹配开头,匹配的结尾是实际的字符,如:“^.*addr:”表达式匹配“ inet addr:”,
而处理目标后的一般匹配的开头是实际的字符,而结尾是用以...结尾(.*$)来匹配。如:Bcast:.*$部分表示匹配“Bcast: 10.0.0 .255 Mask:255.255. 255.0 ” 。在举一例:取mac地址:
[root@oldboy oldboy]# ifconfig eth0|grep HWaddr
eth0 Link encap:Ethernet HWaddr 00: 0C :29:1D:28:D5
[root@oldboy oldboy]# ifconfig eth0|grep HWaddr|sed 's/^.*HWaddr//g'
00: 0C :29:1D:28:D5
#→此题是处理目标前的内容,所以,用“^.*HWaddr匹配“eth0 Link encap:Ethernet HWaddr”
正则表达式(需本周课后总结):
正则表达式就是处理字符串的方法,以行为单位进行字符串的处理,通过一些特殊符号的辅助,可以让用户轻松搜索/替换某些特定字符串。
知识点摘录说明:
本题涉及的基础正则表达式特殊字符说明:
特殊字符 |
含义与例子 |
^word |
搜索以字符(word)开头的行。 |
例:grep -v '^#' oldboy.log 过滤掉以#行首(开始)的行,一般查看配置文件时会用到。 |
|
word$ |
搜索以字符(word)结尾的行。 |
例:grep -n '!$' oldboy.log 搜索以!(叹号)结尾的行 |
|
.(点号) |
代表切只能代表“任意一个”字符,“一个”是一个任意字符 |
例:grep -n 'e.e' oldboy.log 搜索的字符串可以是(eve),(eae),(eee),(e e),但不能仅有(ee)即e与e之间一定且仅有一个字符,而空格符也是字符 |
|
* |
重复零个或多个的前一个重复字符 |
例:grep -n 'ess*' oldboy.log 找出含有(es),(ess),(esss)等的字符串,注意,因为(*)可以是0个,所以es 也是符合搜索字符串。另外,因为(*)为重复“前一个字符”的符号,因此,在(*)之前必须要紧接一个重复字符。任意字符则为(.*) |
更详细的内容请参考
1)《老男孩linux实战培训教案--linux系统正则表达式精华篇》
2) man grep 然后搜索REGULAR EXPRESSIONS
sed拓展内容:
老男孩老师分享有关sed替换功能的小结:
sed替换模型:方框被�~替换成三角▲(会更改文件)
记忆方法:
sed -i 's///g' oldboy.log
sed -i 's###g' oldboy.log
#→观察特点:两边是引号,引号里面的两边分别为s和g,中间是三个一样的字符/或#。
每个字符/或#中间前面的间隔就是被替换的内容,后面的间隔就是替换后的内容。
记 sed 's///g' file #→单引号里两边是s(替换模式)和g(全局匹配替换) 中间是三个斜线,好记吧。
参数意义:
sed -i 's///g' oldboy.log
-i 表示修改文件内容。
g与s联合使用时,表示对当前行全局匹配替换(与单独g意义不同)
s常说的查找并替换,用一个字符串替换成另一个
例子:方框�~三角▲互相替换例子
[oldboy@student ~]$ cat oldboy.log
�~
[oldboy@student ~]$ sed -i 's/�~/▲/g' oldboy.log
[oldboy@student ~]$ cat oldboy.log
▲
[oldboy@student ~]$ sed -i "s/▲/�~/g" oldboy.log
[oldboy@student ~]$ cat oldboy.log
�~
[oldboy@student ~]$ sed -i 's#�~#▲#' oldboy.log
[oldboy@student ~]$ cat oldboy.log
▲
[oldboy@student ~]$ sed -i 's#�~#▲#g' oldboy.log
老男孩老师提示:sed是一个强大的流编辑器命令,在工作中表现出色。尤其是字符替换功能。
案例实践:
[root@oldboy oldboy]# cat a.txt
zhangliang
[root@oldboy oldboy]# sed -e 's/zhangliang/mangyuxi/g' a.txt
mangyuxi
[root@oldboy oldboy]# cat a.txt
zhangliang #→文件内容并未被替换
[root@oldboy oldboy]# sed -i 's/zhangliang/mangyuxi/g' a.txt #→插入替换修改原文件
[root@oldboy oldboy]# cat a.txt
mangyuxi #→文件内容已被替换
更多更详细内容请参考以下课堂教案:
《老男孩linux实战培训教案-强大的流编辑器sed详解指南》
《老男孩linux实战培训教案--awk详解指南》
老男孩linux运维实战培训联系方式
咨询:QQ: 70271111 357851641 31333741
电话:18911718229
网站地址:http://www.etiantian.org http://oldboy.cc
blog:http://oldboy.blog.51cto.com
======================================================
欢迎广到运维兄弟一起交流linux/unix网站运维技术!
网站运维交流群:180056518 114580181 45039636
老男孩 QQ:31333741
mail:[email protected]