正则练习题
基础正则表达式
^ 以什么开头,"^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开头的行
[yuchao-linux01 root ~]$grep "^I" chaoge.txt -n
1:I am teacher yuchao.
2:I teach linux,python.
5:I like video,games,girls
2) $ 查找以什么结尾的行
找出以u结尾的行
[yuchao-linux01 root ~]$grep "u$" chaoge.txt -n
8:#my site is https://www.cnblogs.com/pyyu
找出以.结尾的行
[yuchao-linux01 root ~]$grep "\.$" chaoge.txt -n
1:I am teacher yuchao.
2:I teach linux,python.
6:#I like girls.
9:My qq num is 877348180.
10:my phone num is 15210888008.
3) ^$ 查找和排除空行
找出以I开头,s结尾的行
[yuchao-linux01 root ~]$grep "^I.*s$" chaoge.txt
I like video,games,girls
找出空白行
[yuchao-linux01 root ~]$grep -n "^$" chaoge.txt
4:
排除空行
[yuchao-linux01 root ~]$grep -vn "^$" chaoge.txt
1:I am teacher yuchao.
2:I teach linux,python.
3:testtttsss000123566666
5:I like video,games,girls
6:#I like girls.
7:$my blog is http://yuchaoit.cn/
8:#my site is https://www.cnblogs.com/pyyu
9:My qq num is 877348180.
10:my phone num is 15210888008.
4) . 任意一个字符 不会匹配空行 、可以匹配空格,注意这里的点是正则符、而不是普通的点
[yuchao-linux01 root ~]$grep -n "." chaoge.txt
1:I am teacher yuchao.
2:I teach linux,python.
3:testtttsss000123566666
5:I like video,games,girls
6:#I like girls.
7:$my blog is http://yuchaoit.cn/
8:#my site is https://www.cnblogs.com/pyyu
9:My qq num is 877348180.
10:my phone num is 15210888008.
5) \ 转义特殊字符
找出以$开头的行,注意这个可以使用单引号,更省事
解法一
[yuchao-linux01 root ~]$grep -n "^\\$" chaoge.txt
7:$my blog is http://yuchaoit.cn/
解法二
[yuchao-linux01 root ~]$grep -n '^\$' chaoge.txt
7:$my blog is http://yuchaoit.cn/
6) [ ]匹配字符
匹配小写字母
[yuchao-linux01 root ~]$grep -n "[a-z]" chaoge.txt
1:I am teacher yuchao.
2:I teach linux,python.
3:testtttsss000123566666
5:I like video,games,girls
6:#I like girls.
7:$my blog is http://yuchaoit.cn/
8:#my site is https://www.cnblogs.com/pyyu
9:My qq num is 877348180.
10:my phone num is 15210888008.
找出以.或s结尾的行
[yuchao-linux01 root ~]$grep -n '[.s]$' chaoge.txt
1:I am teacher yuchao.
2:I teach linux,python.
5:I like video,games,girls
6:#I like girls.
9:My qq num is 877348180.
10:my phone num is 15210888008.
找出以I开头,且结尾不是.的行
[yuchao-linux01 root ~]$grep -n '^I.*[^.]$' chaoge.txt
5:I like video,games,girls
7) -i 忽略大小写匹配
[yuchao-linux01 root ~]$grep -i '^i' chaoge.txt
I am teacher yuchao.
I teach linux,python.
I like video,games,girls
扩展正则练习题
准备测试数据
[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.)
[yuchao-linux01 root ~]$grep -E '[0-9]{11}' chaoge.txt -ow
15210888008
匹配QQ号
[yuchao-linux01 root ~]$grep -E '[0-9]{9}' chaoge.txt -ow
877348180
2)查找出所有单词中出现字母连续的行,比如: www,http
重复,可以采用分组,向后引用的特性匹配
[yuchao-linux01 root ~]$grep -E '([a-z])\1{1,}' chaoge.txt
testtttsss000123566666
$my blog is http://www.yuchaoit.cn
#my site is https://www.cnblogs.com/pyyu
My qq num is 877348180.
3)只查找出同一个字母连续3次的行,比如www
[yuchao-linux01 root ~]$grep -E '([a-z])\1{2}' chaoge.txt
testtttsss000123566666
$my blog is http://www.yuchaoit.cn
#my site is https://www.cnblogs.com/pyyu
4)提取网址www.xxx.com
[yuchao-linux01 root ~]$grep -E '([a-z])\1{2}\.[a-Z0-9]{1,}\.[a-Z0-9]{1,}' chaoge.txt -o
www.yuchaoit.cn
www.cnblogs.com
5)提取完整的链接地址https://www.xxx.com
[yuchao-linux01 root ~]$grep -E '([a-z])\1{2}\.[a-Z0-9]{1,}\.[a-Z0-9]{1,}[/]?[a-Z0-9]{0,}' chaoge.txt
$my blog is http://www.yuchaoit.cn
#my site is https://www.cnblogs.com/pyyu
解法二
[yuchao-linux01 root ~]$grep -E 'http[s]?://([a-z])\1{1,}\.[a-z]+\.[a-z]+[/]?.*' chaoge.txt -o
http://www.yuchaoit.cn
https://www.cnblogs.com/pyyu
解法三
[yuchao-linux01 root ~]$grep -E 'h.*://(.*).(.*).(.*)[/]?.*' chaoge.txt
$my blog is http://www.yuchaoit.cn
#my site is https://www.cnblogs.com/pyyu
解法四
[yuchao-linux01 root ~]$grep -E 'h.*://.*[/]?.*' chaoge.txt
$my blog is http://www.yuchaoit.cn
#my site is https://www.cnblogs.com/pyyu
工作常见需求
1)排除配置文件的注释、空行
[yuchao-linux01 root ~]$grep -v '#' chaoge.txt | grep -v '^$'
[yuchao-linux01 root ~]$grep -Ev '^#|^$' chaoge.txt
2)查找某进程是否存在,过滤grep临时进程
[yuchao-linux01 root ~]$ps -ef|grep ssh |grep -v 'grep'
3)查看sda磁盘的使用率
[yuchao-linux01 root ~]$df -h|grep sda|grep -oE '[0-9]+%'
14%
4)查看根分区的磁盘使用率
[yuchao-linux01 root ~]$df -h|grep '/$' |grep -oE '[0-9]+%'
36%
5)取出网卡ip地址
ifconfig命令
[yuchao-linux01 root ~]$ifconfig ens33 |grep 'netmask' | grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' | head -1
192.168.0.242
ip addr show命令
[yuchao-linux01 root ~]$ip addr show ens33 | grep 'ens33$' | grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' | head -1
192.168.0.242
6)统计出系统中所有禁止登录的用户且只显示用户名
[yuchao-linux01 root ~]$grep 'nologin' /etc/passwd |grep -Eo '^[a-Z0-9]+'
bin
daemon
adm
lp
mail
operator
games
ftp
nobody
systemd
dbus
polkitd
tss
sshd
postfix
mysql
7)找出由root创建的用户
[yuchao-linux01 root ~]$grep -E '\b[0-9]{4,}\b' /etc/passwd
yuyu01:x:1000:1000::/home/yuyu01:/bin/bash
yuchao5:x:1002:1002::/home/yuchao5:/bin/bash
yuchao1:x:1003:1003::/home/yuchao1:/bin/bash
yuchao2:x:1004:1004::/home/yuchao2:/bin/bash
yuchao3:x:1005:1005::/home/yuchao3:/bin/bash
yuchao4:x:1006:1006::/home/yuchao4:/bin/bash
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性