当前位置:网站首页>系统学习Shell之正则表达式
系统学习Shell之正则表达式
2022-08-03 13:42:00 【edenliuJ】
目录
什么是正则表达式
正则表达式是用来描述字符串匹配规则的工具。 选择出复合规则的文本,过滤掉不符合规则的文本,如下图所示:

正则表达式的历史非常悠久,并且与UNIX有着不可分割的联系。1940年,美国新泽西州的Warrent McCuloch共和出生在美国底特律的Walter Pitts这两位神经生理学家,研究出了一种使用数学的方式来描述神经网络的方法。它们将神经系统中神经元描述成小而简单的自动控制元,这是正则表达式的雏形。1956年,美国数学家史蒂芬-科尔-克莱尼使用称为正则集合的数学符号来描述上述两位建立的模型,并由此引入正则表达式的概念。后来美国另外一位著名的计算机科学家肯-汤普逊,也就是大名鼎鼎的UNIX之父,将正则表达式引入了UNIX中的一个名为QED的编辑器中,后面有引入了另外一个非常流行的编辑器ed中。最后某些UNIX命令比如grep也提供了正则表达式的支持。目前正则表达式在Linux上得到了广泛的应用。常见的支持正则表达式工具有如下:
- grep命令族:匹配文本行
- sed流编辑器:改变输入流
- awk:处理字符串语言
- more, less:文件查看器
- ed、vi\vim等:文本编辑器
学习正则表达式主要学习它的元字符,元字符是指用来描述字符的字符。元字符的作用在于对字符表达式的内容、转换以及各种操作信息的描述。而正则表达式就是由各种元字符和一般字符构成的字符串。
常见的正则表达式有3种:
- 基本正则表达式
- 扩展正则表达式
- Perl正则表达式
下面我们一一介绍,它们支持的主要元字符
基本正则表达式
基本正则表达式(Basic Regular Expression, BRE)又称为标准正则表达式,是最早制定的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX规范制订的两种正则表达式语法标准之一,另外一种是扩展正则表达式。
基本正则表达式所定义的元字符又如下表几种:
| 元字符 | 说明 |
|---|---|
| ^ | 行首定位符 |
| $ | 行尾定位符 |
| . | 单个字符匹配符,用来匹配任意单个字符,包括空格,但是不包括换行符 |
| * | 一种限定符,限定符它本身不代表任何字符,它是用来指它前面的字符出现多少次才能满足匹配。而*表示匹配前面的字符任意次数,包括0次 |
| [] | 字符集匹配,用来指定一个字符的集合 对于连续的数字或者字母可以使用连字符-来表示以一个范围比如[1-9]表示1~9的任意整数,[a-f]表示匹配a~f中的任意一个字母。 |
| [^] | 字符集不匹配,与[]意思相反,匹配不满足这个字符集合的字符 |
| \(\) | 定义子表达式的开始和结束位置。在后续的正则表达式中可以通过转义序列来引用子正则表达式。最多定义9个子表达式,比如: "\(love\).*\1"表示匹配两个love中间包含任意字符的字符串。其中\1表示引用前面的\(love\)这个子表达式。 |
| x\{m,n\} | 区间表达式,匹配字符x重复次数区间,其中x\{n\}表示最多重复n次,x\{m,}表示最少重复m次,x\{m,n\}表示重复m~n次 |
| \< | 词首定位符 |
| \> | 词尾定位符 |
扩展正则表达式
扩展正则表达式(Extend Regular Expression ERE)支持比基本正则表达式更多的元字符,但是扩展正则表达式对有些基本正则表达式所支持的元字符并不支持。前面介绍的^,$,.,*,[],[^]这6个元字符ERE都支持,接下来重点介绍新增的一些元字符
| 元字符 | 说明 |
|---|---|
| + | 限定符,与限定符*的意义基本相同,不同点在于+限定前面的字符必须出现至少1次 |
| ? | 限定符,限定前面的字符最多出现1次 |
| |和() | 竖线|表示多个正则表达式之间或的关系,()表示一个集合,两个符号经常一起使用。比如: "(ssl|ssh|^yum)"表示匹配包含ssl的字符串或者包含ssh的字符串或者包含以yum行首的字符串 |
ERE取消了子表达式"()"和次数匹配"{m,n}"语法符号的转义符引用,所以在ERE中,使用这两项元字符时,不需要像基本表达式中,"\(\)",x\{m,n\}这样,需要去掉\转义字符。
Perl正则表达式
Perl正则表达式的元字符与ERE的元字符大致相同,ERE的元字符Perl正则表达式都支持,另外Perl正则表达式还增加一些元字符 :
| 元字符 | 说明 |
|---|---|
| \d | 数字匹配,和[0-9]效果一样 |
| \D | 非数字匹配,等价[^0-9] |
| \s | 空白字符匹配,等价[\f\n\r\t\v] |
| \S | 非空白字符匹配。等价于[^\f\n\r\t\v] |
元字符优先级
正则表达式按照从左到右的顺序进行计算,并且遵循一定的优先级,这一点于算术运算符一样。所谓优先级表示在正则表达式,当多个元字符同时出现时,高优先级的元字符会被优先解释处理,下表列出了常用元字符的优先级,按照从高到低的顺序排列:
| 元字符 | 说明 |
|---|---|
| \ | 转义符 |
| [] | 方括号表达式 |
| () | 分组 |
| *,+,?,{m,n},{n},{m,} | 限定符 |
| 普通字符 | 按照从左到右的顺序 |
| ^,$,\>,\< | 定位符 |
| | | 或运算 |
grep命令
在Shell中,grep是与正则表达式关系非常密切的一条命令,我们可以使用它来测试验证我们的正则表达式。grep的语法如下:
grep [options] pattern [file...]
option表示选项 ,pattern表示要匹配的模式,就是正则表达式的字符串,file表示一系列文件,常用的方法是用 | 管道将前面的命令的输出当作grep的输入。
grep默认是用基本正则表达式,如果加上-E 表示用扩展正则表达式, -P 表示用Perl正则表达式
| 选项 | 说明 |
|---|---|
| -c | 只打印匹配的行数,不显示匹配的内容 |
| -i | 匹配时忽略大小写 |
| -h | 搜索多个文件时,不显示匹配文件名前缀 |
| -l | 只列出含有匹配的文本行的文件名,不显示内容 |
| -n | 显示所有匹配的文本行不显示行号 |
| -s | 不显示关于不存在或者读取错误的文件信息 |
| -v | 只显示不匹配的文本行 |
| -w | 匹配整个单词 |
| -x | 匹配整个文本行 |
| -r | 递归搜索目录 |
| -q | 不输出匹配结果,只返回状态码表示是否搜索到 |
| -b | 打印匹配的文本行到文件头的偏移量,单位字节 |
| -E | 支持扩展正则表达式 |
| -P | 支持Perl正则表达式 |
| -F | 不支持正则表达式,按照字面意思匹配 |
小结
本篇文章主要解释了Shell中的正则表达式是什么,其中主要介绍了基本正则表达式,扩展正则表达式,Perl正则表达式,正则表达式还是需要多多练习。
边栏推荐
猜你喜欢

数据科学家 Agnis Liukis :在ML领域,初学者踩过的5个坑
动作条的多项复选

PyTorch builds a neural network to predict temperature (dataset comparison, CPU vs GPU comparison)

secureCRT连接开发板连接不上问题解决

【OpenCV】 级联分类器训练模型

冷链行业商业供应链系统:实现全流程数字化协同,激活企业迸发市场活力

TiFlash 计算层概览

js单线程及事件循环、宏任务和微任务

《深度学习》-学习笔记-1-机器学习基础

An introduction to the width tool, deformation tool and lasso tool
随机推荐
The maximum number of sliding window
设计思维 | 详看设计工作坊Workshop的11个关键技巧
c语言结构体知识总结
致一位湖南女孩
为什么手动启动GBase 8c数据库中GTM节点,起不来。显示“Run cmd failed:scp: /tmp/gtm_gtm1.server: Permission denied”
Notepad++ install jsonview plugin
数据科学家 Agnis Liukis :在ML领域,初学者踩过的5个坑
[Microservice] Multi-level cache
动作条的多项复选
冷链行业商业供应链系统:实现全流程数字化协同,激活企业迸发市场活力
参数量仅0.5B,谷歌代码补全新方法将内部生产效率提升6%
驻尼日利亚使馆发布阿布贾祖玛岩附近地区紧急安全预警
js \n\r 换行失败 :【white-space: pre-line;】${} Template Literals
CVPR 2022 | Predicting Skeletons from Human Meshes, True Physiological Skeletons!
The embassy in Iceland reminds Chinese citizens in Iceland to strengthen safety protection
将移位距离和假设外推到非二值化问题
安全狗《云原生安全威胁分析报告》首次提出双检测模型
国产替代风潮下,电子元器件B2B商城系统如何助力企业突围市场竞争
W11或W10系统如何进行休眠?
爱可可AI前沿推介(8.3)