正则表达式

正则表达式和通配符的区别

正则表达式:处理的是文本内容中的字符

通配符:用来处理文件名

正则表达式(支持的工具:grep、egrep、sed、awk)

1.代表字符(元字符)

2.表示次数

3.位置锚定

4.分组或其他

基础正则表达式常见的元字符(字符匹配)

不表示本来的含义,在正则表达式中有特殊含义的字符

字符 含义
. 单个任意字符,可以是一个汉字
\ 转义字符,用于取消特殊符号的含义
[ ] 匹配指定范围内的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符
[:lower:] 小写字母
[:upper:] 大写字母
[.] 任何元字符放在在方括号里都代表他原来的意思,.在里面意思就是.
[^] 匹配指定范围外的任意单个字符,例如[^0-9]匹配任意一位非0-9里的字符

表示次数

字符 含义
* 匹配前面的字符任意次数,0到正无穷次
.* 任意长度字符,不包括0次
\? 0或一次,可有可无的
\ + 1次到正无穷次
\ {3 \ } 前面的字符出现三次
\ {3,5 \ } 前面的字符出现3到5次
\ {3, \ } 前面的字符最少出现三次
\ {,5 \ } 前面的字符最多出现5次

位置锚定

字符 含义
^ 代表开头的行
$ 代表结尾的行
^PATTERN$ 用于模式匹配整行 (单独一行 只有root)
^$ 空行
^[[:space:]]*$ 空白行
\ < 代表以什么字符为开头,等同于\b
\ > 代表以什么字符为结尾,等同于\b

echo hello-123 |grep "\ <123"

echo hello_123 |grep "\ <123"

echo hello 123 |grep "\ <123"

除了 字母 数字 下划线其他都算 单词的分隔符

分组或其他

分组:用括号( )将需要组合的字符括起来,当作一个整体去处理,如(root)+

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

方式为:\1,\2,\3......分组

\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

或者

或者:\|

扩展正则表达式元字符:(支持的工具:egrep、awk)

字符 含义
+ 匹配前面子表达式1次以上,例:go+d,将匹配至少一个o,good、gooood、gooooood都可以匹配到
匹配前面子表达式0次或1次,例:go?d,将匹配gd或者god
() 将括号中的字符串看作是一个整体,例:g(oo)+d,将匹配oo整体一次以上,如good、goooood等
| 以或的方式匹配字符串,例:g(oo|la)d,将匹配good或者glad

实验题

如何查找ip地址

ifconfig ens33|grep netmask|grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+'

ifconfig ens33|grep netmask|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

筛选出ip地址的四个分段

0-9\]\\{1,3}\\:三位数,每位是0-9的范围 ### 表示qq号 echo "aa940132245" \|grep "\\b\[0-9\]\\{6,12\\}\\b" ### 表示邮箱 echo "zhou@qq.com" \|grep -E "\[\[:alnum:\]_\]+@\[\[:alnum:\]_\]+\\.\[\[:alnum:\]_\]+" ### 表示手机号 echo "13705173391"\|grep -E "\\b1\[3456789\]\[0-9\]{9}\\b"

相关推荐
invicinble13 分钟前
对linux形成认识
linux·运维·服务器
马克Markorg17 分钟前
常见的向量数据库和具有向量数据库能力的数据库
数据库
技术路上的探险家25 分钟前
8 卡 V100 服务器:基于 vLLM 的 Qwen 大模型高效部署实战
运维·服务器·语言模型
半桔1 小时前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
绵绵细雨中的乡音1 小时前
深入理解 ET 与 LT 模式及其在 Reactor 模型中的应用
服务器·网络·php
HABuo1 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
Howrun7772 小时前
关于Linux服务器的协作问题
linux·运维·服务器
Coder_Boy_2 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
helloworldandy3 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
yunfuuwqi3 小时前
OpenClaw✅真·喂饭级教程:2026年OpenClaw(原Moltbot)一键部署+接入飞书最佳实践
运维·服务器·网络·人工智能·飞书·京东云