正则练习题

正则表达式需要默写

达到手写正则表达式的能力,是面试一个高频考点。

基础正则表达式
^       以什么开头,"^yuchao" 表示匹配以yuchao单词开头的行
$       以什么结尾,"yuchao$",表示匹配以yuchao单词结尾的行
^$      组合符号,表示空行。逻辑解释就是以^开始,以$结尾的行
.       匹配任意且只有一个字符,但是不匹配空行
\       转义字符,让特殊符号失效,如"\."只表示小数点
*       匹配前一个字符(连续出现)0次或1次以上,注意,当重复0次的时候,表示什么也没有,但是会撇皮所有内容
.*      组合符,匹配所有内容
[abc]   匹配[]内包含的任意一个字符a或b或c
[a-z]   匹配[]内包含a-z任意一个字符
[0-9]   匹配[]内包含0-9的任意一个数字
[^abc]  匹配不包含^后的任意字符a或b或c,这里的^表示对[abc]的取反,与在外面的^意义不同


扩展正则表达式
--------------------
+				匹配前1个字符1次或多次
[:/]+   匹配括号内的 ":" 或 "/" 字符1次或多次
?       匹配前一个字符0次或1次
|       表示或者,即同时过滤多个字符串
()      分组过滤,被括起来的内容表示一个整体,另外()的内容可以被后面的\n引用,n为数字,表示引用第几个括号的内容
\n      引用前面()里的内容,例如(abc)\1 表示匹配abcabc
a{n,m}  匹配前一个字符最少n次,最多m次
a{n,}   匹配前一个字符最少n次
a{,m}   匹配前一个字符最多m次
a{n}    匹配前一个字符正好n次

基础正则表达式练习题

测试数据,注意,测试数据如果修改了,看的结果也不一样了

[yuchao-linux01 root ~]$cat chaoge.txt
I am teacher yuchao.
I teach linux,python.
testtttsss000123566666

I like video,games,girls
#I like girls.
$my blog is http://yuchaoit.cn/
#my site is https://www.cnblogs.com/pyyu
My qq num is 877348180.
my phone num  is 15210888008.

练习题

这里注意grep的参数使用

1) ^ 查找以什么开头的行
找出以I开头的行



2) $ 查找以什么结尾的行
找出以u结尾的行


找出以.结尾的行


3) ^$ 查找和排除空行
找出以I开头,s结尾的行


找出空白行


排除空行



4) . 任意一个字符 不会匹配空行 、可以匹配空格,注意这里的点是正则符、而不是普通的点




5) \ 转义特殊字符
找出以$开头的行,注意这个可以使用单引号,更省事


6) [ ]匹配字符
匹配小写字母


找出以.或s结尾的行


找出以I开头,且结尾不是.的行



7) -i 忽略大小写匹配
找出所有的i开头的行



扩展正则练习题

准备测试数据

[yuchao-linux01 root ~]$cat chaoge.txt
I am teacher yuchao.
I teach linux,python.
testtttsss000123566666

I like video,games,girls
#I like girls.
$my blog is http://www.yuchaoit.cn
#my site is https://www.cnblogs.com/pyyu
My qq num is 877348180.
my phone num  is 15210888008.

正则表达式,写法不唯一,只要语法合规,都可以拿到最终结果。

1){}匹配手机号
grep 参数
-E 扩展正则
-o 只显示结果
-w 匹配单词(单词表示出现了分割符如,hello,i am super mam.)


匹配QQ号


2)查找出所有单词中出现字母连续的行,比如: www,http
重复,可以采用分组,向后引用的特性匹配





3)只查找出同一个字母连续3次的行,比如www




4)提取网址www.xxx.com




5)提取完整的链接地址https://www.xxx.com


如上的正则,只能说是针对测试数据可用,具体换一套数据,我们还得对正则有清晰的认识,才能正确提取数据。

工作常见需求

1)排除配置文件的注释、空行

2)查找某进程是否存在,过滤grep临时进程

3)查看sda磁盘的使用率
14%

4)查看根分区的磁盘使用率


5)取出网卡ip地址
ifconfig命令




6)统计出系统中所有禁止登录的用户且只显示用户名


7)找出由root创建的用户