正则表达式八道练习题:
Linux:运维正则表达式练习题:
1、显示/etc/passwd文件中以bash结尾的行
2、显示/etc/passwd文件中的两位数或三位数
3、显示`ss -ant`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行
4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行
5、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)
6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
7、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名
8、找出ip add命令执行结果中1-255之间的数字
---------------------------------------------------------------------
答案分解:
第一题:显示/etc/passwd文件中以bash结尾的行

此题太简单不解释了。
第二题:显示/etc/passwd文件中的两位数或三位数
egrep "[0-9]{2,}" /etc/passwd
第三题:
显示`ss -ant`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行
ss -ant|ergep "TEN(\s)+${1,}"
\s在这里是,空白字符。
解题思想:我要过滤匹配以TEN加空格字符结尾,重复一次以上的输出结果
第四题:解题思想:
老师讲解过,匹配的内容会有一个贪婪模式,尽可能的向后匹配。题目要求,找出/etc/passwd文件中用户名与其shell名相同的行
答案结果(如图):
解题思想:以A-Za-z0-9为一个组,重复一次以上,以重复前面前面组的子表达式为结尾(唯一的结尾)
egrep "^([A-Za-z0-9]{1,}):.*\1$" /etc/passwd
--------------------------------------------------------------------------------------
第五题:
显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)
解题思想:以root用户,centos用户,user1用户开头的,取第1,3,7列
egrep "^root|centos|user1"/etc/passwd|awk -F "[:]" '{print $1":"$3":"$7}'
第六题:
找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
解题思想:精确匹配,单词中间允许存在下划线,(一个或者零个),后面跟着一组小括号
egrep "\<[a-z]_?.*\(\)" /etc/rc.d/init.d/functions
第七题:使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名:
解题思想:
第八题:找出ip add命令执行结果中1-255之间的数字—
第一组数字0-9
第二组数字是十位数,十位数是两位。不能拆分开要作为一组数字来显示,用小括号括起来
第三组为三位数,数字范围100---------255
ip add|egrep "\<(([1-9])|([1-9][1-9])|(1[0-9]{2})|(2[0-5]{2}))"