当前位置:网站首页>系统学习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正则表达式,正则表达式还是需要多多练习。
边栏推荐
- An introduction to the width tool, deformation tool and lasso tool
- Nanoprobes 金纳米颗粒标记试剂丨1.4 nm Nanogold 标记试剂
- PyTorch builds a classification network model (Mnist dataset, fully connected neural network)
- 数据分析(二)——numpy
- The embassy in Iceland reminds Chinese citizens in Iceland to strengthen safety protection
- 中英文说明书丨Abbkine AbFluor 488-鬼笔环肽
- 升级农企业务运营建设,智慧供应链管理平台打造“共赢生态链”
- 位级运算之提取位级表示的最高位
- Heaps
- 爱可可AI前沿推介(8.3)
猜你喜欢
国产替代风潮下,电子元器件B2B商城系统如何助力企业突围市场竞争
Nanoprobes EnzMet - 酶金相相关介绍及应用
《深度学习》-学习笔记-1-机器学习基础
An introduction to the pen tool, pencil tool and brush tool
Nanoprobes FluoroNanogold 偶联物的特色和应用
OpenHarmony高校技术俱乐部计划发布
PCL 点云按时间进行分段
TensorFlow离线安装包
An animation based button animation combined with basic code
爱可可AI前沿推介(8.3)
随机推荐
Golang sync.WaitGroup
PyTorch构建分类网络模型(Mnist数据集,全连接神经网络)
GBase 8c数据库集群中,怎么替换节点呢?比如设置A节点为gtm,换到B节点上。
冷链行业商业供应链系统:实现全流程数字化协同,激活企业迸发市场活力
《深度学习》-学习笔记-1-机器学习基础
JS get browser type
Relia Tech活性VEGFR重组蛋白丨小鼠 VEGF120实例展示
保健用品行业B2B电子商务系统:供采交易全链路数字化,助推企业管理精细化
Golang strings
北斗三号系统建成开通两周年:基础设施端核心技术已实现自主可控
[OpenCV] Cascade classifier training model
go map转struct【mapstructure库】
Golang structs & methods
MySQL【视图】
js单线程及事件循环、宏任务和微任务
MySQL数据表操作实战
js \n\r 换行失败 :【white-space: pre-line;】${} Template Literals
Zhang Le: The Golden Triangle of R&D Efficiency and Practice in the Field of Demand and Agile Collaboration|Live Review
The embassy in Iceland reminds Chinese citizens in Iceland to strengthen safety protection
1, introduction to petri net