『忘了再学』Shell基础 — 25、扩展正则表达式
1、扩展正则表达式说明
熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Shell的正则表达式中还可以支持一些元字符,比如+、?、|、()。
其实Linux系统是支持这些字符的,只是grep命令默认不支持而已(grep命令无法识别扩展正则表达式)。
如果要想支持这些字符,必须使用egrep命令或grep -E选项,才能识别扩展正则表达式的字符,所以我们又把这些字符称作扩展字符。
egrep命令和grep -E命令是一样的,所以我们可以把两个命令当做别名来对待。
扩展正则表达式符号如下:
| 扩展元字符 | 作用 |
|---|---|
+ |
前一个字符匹配1次或任意多次。 如 go+gle会匹配gogle、google或gooogle,当然如果o有更多个,也能匹配。 |
? |
前一个字符匹配0次或1次。 如 colou?r可以匹配colour或color。 |
| ` | ` |
() |
匹配其整体为一个字符,即模式单元。可以理解为由多个单字符组成的大字符。 如 (dog)+会匹配dog、dogdog、dogdogdog等,因为被()包含的字符会当成一个整体。但`hello (world |
2、练习
(1)+和?练习
如下文本:
Stay hungry, stay foolish. ——Steve Jobs
求知若饥,虚心若愚。——乔布斯
Stay hungry, stay flish. ——Steve Jobs
Stay hungry, stay folish. ——Steve Jobs
Stay hungry, stay fooolish. ——Steve Jobs
Stay hungry, stay foooolish. ——Steve Jobs
Stay hungry, stay fooooolish. ——Steve Jobs
+
+表示匹配前一个字符1次或任意多次。
执行命令:grep -E "fo+l" test2.txt

我们可以看到foolish单词中,有o的全部匹配到了,而flish被过滤掉。?
?表示匹配前一个字符0次或1次。
执行命令:grep -E "fo?l" test2.txt

- 最后我们再来看一下
*。
*表示匹配前一个字符匹配0次或任意多次。
执行命令:grep -E "fo*l" test2.txt

可以看出,+和?就相当于把*从1的位置分成了两部分,?是匹配前一个字符0次或1次,+是匹配前一个字符1次或任意多次。
(2)|和()练习
这两个符号经常会联合使用。
|匹配两个或多个分支选择,表示或者的意思。
()匹配其整体为一个字符,表示整体的意思。
练习:匹配IP地址。
文本内容如下:
192.168.1.222
6666666666666
执行命令:grep -E "^(([0-9]\.)|([1-9][0-9]\.)|(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)){3}(([0-9])|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))$" text3.txt

在Shell中能识别的正则表达式就是这些了。
3、注意(重点)
通过正则表达式匹配邮箱来说明:
匹配邮箱正则如下:
[0-9a-zA-Z_]+@[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+){1,3}
说明:
[0-9a-zA-Z_]+(邮箱名称):表示数字、小写字母、大写字母、下划线可以重复最少1次。[0-9a-zA-Z_]+(邮箱域名):表示数字、小写字母、大写字母、下划线可以重复最少1次。(\.[0-9a-zA-Z_]+){1,3}:表示数字、小写字母、大写字母、下划线可以重复最少1次,整体可重复1到3次。比如:处理com.cn格式等。
特别注意:
我们可以看到上边
{1,3},并没有写成基础正则表达式\{1,3\}的样式。是因为
grep -E命令支持标准的正则表达式格式,不再需要对{}进行转义,如果加上转义符,还会报错。这点需要特别注意一下。
『忘了再学』Shell基础 — 25、扩展正则表达式的更多相关文章
- 『忘了再学』Shell基础 — 30、sed命令的使用
目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...
- 『忘了再学』Shell基础 — 3、echo命令的介绍与使用
目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...
- 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)
提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...
- 『忘了再学』Shell基础 — 24、Shell正则表达式的使用
目录 1.正则表达式说明 2.基础正则表达式 3.练习 (1)准备工作 (2)*练习 (3).练习 (4)^和$练习 (5)[]练习 (6)[^]练习 (7)\{n\}练习 (8)\{n,\}练习 ( ...
- 『忘了再学』Shell基础 — 1、Shell的介绍
目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...
- 『忘了再学』Shell基础 — 4、Bash基本功能(history命令)
目录 1.history历史命令 2.设置命令历史记录的条数 3.清空历史命令 4.历史命令的调用 5.命令与文件的补全 在Linux系统中默认的Shell就是Bourne-AgainShell(简称 ...
- 『忘了再学』Shell基础 — 9、Bash中的特殊符号(一)
目录 1.双单引号 2.双引号 3.$符号 4.反引号 5.$()符号 6.#符号 7.\符号 1.双单引号 '':单引号.在单引号中所有的特殊符号,如$和"`"(反引号)都没有特 ...
- 『忘了再学』Shell基础 — 11、变量定义的规则和分类
目录 1.定义变量的规则 2.变量的分类 1.定义变量的规则 在定义变量时,有一些规则需要遵守 变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是2name则是错误的. 在Bash ...
- 『忘了再学』Shell基础 — 16、位置参数变量
目录 1.位置参数变量$n 2.位置参数变量$*和$@ 3.位置参数变量$# 位置參数变量的作用主要用于脚本的传参. 位置參数变量的名称和作用都是确定不能改变的,但是该变量的内容是可以更改的,也就是变 ...
随机推荐
- git生成和添加SSH公钥
一 .前言: 大家换电脑.换公司的时候,经常要关联本地git和git线上仓库, 在这里我就顺便记一下,好记性不如烂笔头, 以后找起来来方便 二 .查看自己是否生成过公钥,有的话可以直接拿过来用, 也可 ...
- (动态模型类,我的独创)Django的原生ORM框架如何支持MongoDB,同时应对客户使用时随时变动字段
1.背景知识 需要开发一个系统,处理大量EXCEL表格信息,各种类别.表格标题多变,因此使用不需要预先设计数据表结构的MongoDB,即NoSQL.一是字段不固定,二是同名字段可以存储不同的字段类型. ...
- python if else代码优化
开发过程遇到一个问题,用户的性别在数据库中存储时并不会用中文表示,数据库使用male.female.other代表男性.女性和其他,可接口传给前段时希望用户的性别是中文,这时就需要转换. 下面这段代码 ...
- Blazor技术开发了一个访客管理系统
简单介绍一下系统功能 该系统为了在疫情期间能很好管理访客登记做好风险管控,同时可以整合智能设备做到自动确认并跟踪访客的行动轨迹,该项目完全开源. 系统流程 访客可以同通过手机进行预注册,同时上传照片, ...
- MySQL---char和varchar的区别
char和varchar的区别 char表示定长, 即长度固定. varchar表示变长, 即长度可变. 当输入数据的长度小于定义的长度时, char会用空格填充, 而varchar则按照实际长度存储 ...
- 电机三环pid控制及调试经验
一.伺服电机的双环pid 双环pid在正常底盘运动的控制中已经足够了,但是对于双轴云台的控制来说,双环pid的云台控制的响应速度是远远不够的,所以加入了电流环的控制. 两篇大佬的文章--这是我学习pi ...
- 我们可以定向调度某个pod在某个node上进行创建
集群环境:1.k8s用的是二进制方式安装 2.操作系统是linux (centos)3.操作系统版本为 7.2/7.4/7.94.k8s的应用管理.node管理.pod管理等用rancher.k8s令 ...
- Pinpoint介绍及docker安装方式
一.介绍 Pinpoint是用Java编写的大型分布式系统的APM(Application Performance Management应用程序性能管理)工具,受Dapper论文的启发,Pinpoin ...
- (2020行人再识别综述)Person Re-Identification using Deep Learning Networks: A Systematic Review
目录 1.引言 2.研究方法 2.1本次综述的贡献 2.2综述方法 2.3与现有综述的比较 3.行人再识别基准数据集 3.1基于图像的再识别数据集 3.2基于视频的再识别数据集 4.基于图像的深度再识 ...
- 【面试普通人VS高手系列】Dubbo的服务请求失败怎么处理?
今天分享的面试题,几乎是90%以上的互联网公司都会问到的问题. "Dubbo的服务请求失败怎么处理"? 对于这个问题,我们来看一下普通人和高手的回答. 普通人: 嗯- 我记得, D ...