正则表达式需要默写
达到手写正则表达式的能力,是面试一个高频考点。
基础正则表达式
^ 以什么开头,"^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创建的用户