Linux Shell 脚本编程学习之【第3章 正则表达式 (第一部分)】

第3章 正则表达式

  • 1 正则表达式基础
    • 1.1 *符号
    • 1.2 “.”符号
    • 1.3 “^”符号
    • 1.4 “$”符号
    • 1.5 “[]”符号
    • 1.6 “\”符号
    • 1.7 “\<\>”符号
    • 1.8 “\{\}”符号
  • 2 正则表达式扩展
    • 2.1 “?”符号
    • 2.2 “+”符号
    • 2.3“()”符合和“ | ”符号
  • 3 通配(Globbing)

1 正则表达式基础

1、正则表达式是由一串字符和元字符构成的字符串,简称 RE(Regular Expression)。
2、正则表达式起到数据过滤作用。
3、POSIX 标准将正则表达式分为两类:基本的正则表达式和扩展的正则表达式,大部分 Linux 应用和工具仅支持基本的正则表达式。

Linux Shell 以一串字符作为表达式向系统传达意思。元字符 (Metacharacters) 是用来阐 释字符表达式意义的字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内 容、转换及各种操作信息进行描述。正则表达式是由一串字符和元字符构成的字符串,简称 RE(Regular Expression)。 正则表达式的主要功能是文本查询和字符串操作,它可以匹配文 本的一个字符或字符集合。

基本的正则表达式元字符集合及其意义

符 号意 义
*0个或多个在*字符之前的那个普通字符
.匹配任意字符
A匹配行首,或后面字符的非
$匹配行尾
1匹配字符集合
\转义符,屏蔽一个元字符的特殊意义
<精确匹配符号
\n}匹配前面字符出现n次
{n,N)匹配前面字符至少出现n次
\n,m}匹配前面字符出现n~m次

一些举例:

1.1 *符号

*”符号用于匹配前面一个普通字符的0次或多次重复,如:
-----
hel*o
-----*”符号前面的普通字符是l,*字符就表示匹配l字符0次或多次,如字符串helo、hello、hellllllo 都可以由 hel*o来表示。

1.2 “.”符号


点号“. ”用于匹配任意一个字符,如:
-----
..73.
-----
由于“. ”符号只能匹配一个字符,因此,上述字符串表示前面三个字符为任意字符,第4和第5个字符是73,最后一个字符为任意字符,如xcb738、4J973U 都能匹配上述字符串。值得注意的是,"."符号可以匹配一个空格,因此, xb738、ui73e 也能匹配上述字符串。

1.3 “^”符号

^”符号用于匹配行首,表示行首的字符是“^”字符后面的那个字符,如:
-----
^cloud
-----
这表示匹配以cloud开头的行。结合上面介绍的“*”符号和“. ”符号,再举一个例子:
-----
^.X86*
-----
该字符串表示行首的三个字符为任意字符(可以是空格),46个字符为 X86,7个字符开始可以重复匹配6,如:866X86666、86X86  都可以匹配上述字符串。

1.4 “$”符号

$符号匹配行尾,$符号放在匹配字符之后,与“A”符号的功能和用法都相反,如:
-----
micky$
-----
该正则表达式表示匹配以micky 结尾的所有行。 一个特殊的正则表达式是匹配所有空行的表达式,为:
-----
^$
-----
该正则表达式既匹配行首,又匹配行尾,中间没有任何字符,因此,为空行。
如果需要匹配只包含一个字符的行,如下面的例3-7所示:
-----
^.$
-----

1.5 “[]”符号

方括号[]匹配字符集合,该符号支持穷举方法列出字符集合的所有元素,也支持使用“- ” 符号表示字符集合范围,表明字符集合范围从" "左边字符开始,到“   ”右边字符结束。举例
-----
[0123456789]   --任意字符
[0-9]   --任意字符
[a-z]   #所有小写字母
[A-Z]   #所有大写字母
[b-p]   #小写字母b~p
[^b-d]  #^表示取反,即除了字母b~p之外的字母。
[A-Za-z][A-Za-z]*    #匹配所有的英文单词
-----

1.6 “\”符号

“\”符号是转义符,用于屏蔽一个元字符的特殊意义,即以字面含义来解释“\”符号后 面的元字符,如:
-----
\.
-----
反斜杠后面的字符“."是元字符,经过转义后,“. ”不再表示任意一个字符,而是一个 普通字符句号“. ”。转义符“\”是引用符的一种

1.7 “<>”符号

“\<>”符号是精确匹配符号,该符号利用“\”符号屏蔽“◇”符号,如:
-----
\<the\>
-----
该正则表达式精确匹配the这个单词,而不匹配包含 the字符的单词,如 them、there、another等。

1.8 “{}”符号

“\{\}”系列符号与“*”符号类似,都是表示前一个字符的重复。但是,“*”符号表示 重复0次或任意次,而“\{\}”系列符号可以指定重复次数,“\{\}”系列符号包括以下三种 形式。
●  \{n\}: 匹配前面字符出现n 次。
● \{n,\}: 匹配前面字符至少出现n 次。
● \{n,m\}: 匹配前面字符出现n~m 次。
举例:
-----
O\{3\}B      #重复字符03次
JO\{3,\}B    #重复字符o 至少3次
JO\{3,6\}B   #重复字符03~6次
[a-z]\{5\}  #表示精确匹配5个小写英文字母,比如 hello、house等。
-----
JO\{3\}B表示重复字符03次,匹配值为: JOOOB。
JO\{3,\}B 表示重复字符O 至少3次, JOOOB、JOOOOB、JOOOOOB等字符串都可由该正则表达式来匹配。
JO\{3,6\}B 表示重复字符O至少3次,至多6次, JOOOB、JOOOOOOB 等字符串都满足,但是JOOB、JOOO000OB等字符串就不满足。

2 正则表达式扩展

符 号意 义
?匹配0个或1个在其之前的那个普通字符
+匹配1个或多个在其之前的那个普通字符
0表示一个字符集合或用在expr中
I表示“或”,匹配一组可选的字符

2.1 “?”符号

匹配"?"符号之前的那个字符0次或1次,如:
-----
JO?B
-----
该表达式表示匹配O 字符0次或1次,即匹配JOB 或JOOB。 需要注意的是,“?”字符
至多可以匹配1个字符。

2.2 “+”符号

与“*"符号类似,都是匹配其前面的那个字符多次,但是,“*”符号可以匹配0次,而 “+”符号至少匹配1次,如:
-----
S+EU
-----
该表达式表示匹配S1 次或任意次, SSEU、SSSSEU 等字符串都可由该表达式进行匹配, 而SEU 却不能由S+EU 来匹配。

2.3“()”符合和“ | ”符号

()”符号通常与“I”符号结合使用,表示一组可选字符的集合,如:
-----
re(a|e|o)d
-----
该表达式中的(a|e|o)表示在字符 a、e和 o 中选择任意一个字符,即 read、reed、reod 都 可由该表达式进行匹配。
事实上,()符号很少使用到,因为“[]”符号完全能够替代“()”符号表示一组可选字符 的集合, re(alelo)d 就等价于 re[aeo]d。
“ | ”符号也可以表示多个正则表达式的“或”关系,基本格式为:
-----
RE1 | RE2 | RE31 |...
-----
上述格式中, RE1、RE2 和 RE3 表示正则表达式。
“|”符号在扩展的正则表达式中表示“或”意义,遗憾的是, “|”符号的这种用法却很少 被人记住,“|”符号最著名的是其管道符用法.

3 通配(Globbing)

bash Shell 可以使用正则表达式中的一些元字符实现通配 (Globbing) 功能,通配是把一个包含通配符的非具体文件名扩展存储在计算机、服务器或者网络上的一批具体文件名的过程。

最常用的通配符包括正则表达式元字 符:?、、[]、{}、^等。这些元字符在通配中的意义与正则表达式中的意义不完全一致, 符号不再表示其前面字符的重复,而是表示任意位的任意字符,?字符表示一个任意字符, A 符号在通配中不代表行首,而是代表取反。

ls -l [a-h]*.awk
ls -l  {[a-h]*.awk,0?.pem}      #满足[a-h]*.awk 或0?.pem 的所有文件

黑客输入包含通配符的文件名故意让服务器重复和连续不断地进行通配 可能引起的拒绝服务攻击。因此,大型服务器经常通过限制服务器执行通配功能的次数、限 制一个具体用户每次输入的通配符或者如果通配符太普通,则拒绝执行通配等方法来提高服 务器的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/7607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生产环境Session解决方案、Session服务器之Redis

目录 一、服务器配置 二、安装nginx 三、安装配置Tomcat&#xff1a; 四、配置session Session服务器之Redis Redis与Memcached的区别 安装部署redis 一、服务器配置 IP地址 主机名 软件包列表 192.168.100.131 huyang1 nginx 192.168.100.133 huyang3 JDK Tomca…

微信小程序上,实现图片右上角数字显示

微信小程序上&#xff0c;实现图片右上角数字显示 直接上代码&#xff1a; 样式代码index.wxss如下&#xff1a; .circle_rednum {position: absolute;color: white;font-size: 13px;background-color: #EC2F43;width: 23px;height: 23px;line-height: 23px;left: 80%;top: …

【docker】docker部署tomcat

目录 1.1 搜索tomcat镜像1.2 拉取tomcat镜像1.3 创建容器&#xff0c;设置端口映射、目录映射1.4 测试 1.1 搜索tomcat镜像 docker search tomcat1.2 拉取tomcat镜像 docker pull tomcat1.3 创建容器&#xff0c;设置端口映射、目录映射 # 在/root目录下创建tomcat目录用于存…

数据库备份还原-mysqldump、mydumper、xtrabackup、压缩

数据库备份&#xff0c;数据库为school&#xff0c;素材如下 一、创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARC…

Linux中常用的指令

ls ls [选项] [目录或文件] 功能&#xff1a;对于目录&#xff0c;列出该目录下所有的子目录和文件&#xff1b;对于文件&#xff0c;列出该文件的文件名和其他属性 常用选项&#xff1a; -a:列出目录下的所有文件&#xff0c;包括以.开头的隐藏文件 -l:列出文件的详细信息。…

单片机第一季:零基础11——实时时钟DS1302

目录 1&#xff0c;DS1302 时钟芯片介绍 2&#xff0c;BCD码介绍 3&#xff0c;涉及到的寄存器 3.1&#xff0c;控制寄存器 3.2&#xff0c;日历/时钟寄存器 3.3&#xff0c;DS1302 的读写时序 4&#xff0c;相关代码 这一章我们来学习DS1302 时钟芯片&#xff0c…

测牛学堂:软件测试之andorid app性能测试面试知识点总结(二)

APP性能测试指标之FPS 如果经常玩游戏的同学应该听过FPS。 FPS本来是图像领域中的概念&#xff0c;是指画面每秒传输的帧数。每秒钟帧数越多&#xff0c;所显示的动作就会越流畅。 但是因为功耗的限制&#xff0c;一般60fps就是跑满的效果了。 我们测试的话&#xff0c;一般…

如何在Windows上恢复已删除的文件?

大多数人在无意中删除了一些重要文件后无法恢复。这些文件被暂时删除&#xff0c;直到我们清空回收站才会消失。你可以通过右键单击回收站中的文件并选择还原选项来轻松恢复这些文件。但是&#xff0c;如果你清理回收站删除了文件怎么办&#xff1f;或者不小心使用Shift Delet…

Pytorch nn.Linear的基本用法与原理详解

1. 参考 Pytorch nn.Linear的基本用法与原理详解_iioSnail的博客-CSDN博客 [机器学习]深度学习初学者大疑问之nn.Linear(a,b)到底代表什么?_五阿哥爱跳舞的博客-CSDN博客

Rola-IP系统崩溃怎么办?亚马逊、沃尔玛、速卖通等测评该如何应对?(详解篇)

近期做测评的卖家遇到了一个大问题&#xff0c;罗拉IP&#xff08;rola-ip&#xff09;的突然关闭&#xff0c;给用户带来了诸多不便&#xff0c;这种跑路行为让用户损失惨重。身为IP提供商&#xff0c;跑路不仅伤害了用户的信任&#xff0c;也影响了用户的项目和工作。 许多用…

观察者模式(java)

目录 结构 案例 代码实现 抽象观察者 抽象主题类 具体观察者 具体主题类 测试类 优缺点 优点 缺点 结构 在观察者模式中有如下角色&#xff1a; Subject&#xff1a;抽象主题&#xff08;抽象被观察者&#xff09;&#xff0c;抽象主题角色把所有观察者对象保存在一个…

Mysql数据库用户操作

# Mysql数据库用户操作 ## 1.1创建用户 shell create user ‘nz’ identified by ‘123456’ # hzm&#xff1a;用户账号&#xff0c;123456&#xff1a;密码 create user ‘nz’’%’ identified by ‘123456’ #所有ip都可用账号 create user ‘nz’’localhost’ identifi…

zabbix通过JMX监控tomcat运行情况

第三阶段基础 时 间&#xff1a;2023年7月20日 参加人&#xff1a;全班人员 内 容&#xff1a; zabbix通过JMX监控tomcat 目录 zabbix通过JMX监控tomcat 一、配置java网关 二、修改zabbix服务端配置文件 三、安装tomcat 四、Zabbix-web端配置 zabbix通过JMX监控tomc…

苹果11手机设置手机跟踪功能

苹果11手机设置手机跟踪功能&#xff0c;就算是手机丢了&#xff0c;也能通过查询手机定位在哪里。 第一步&#xff1a;点击Apple ID进入详情 第二步&#xff1a;点击“查找” 第三步&#xff1a; 第四步&#xff1a; 到了这步&#xff0c;就算是设置成功。 下面需要到官方查询…

初步认识Linux系统编程

Linux是一种自由和开放源代码的操作系统&#xff0c;它以良好的稳定性、强大的安全性和广泛的应用领域而著称。Linux系统编程是指在Linux操作系统下开发应用程序的过程&#xff0c;其中包括与硬件交互、系统调用以及与其他程序进行通信等。 文章目录 学习Linux系统编程前的准备…

04. Idea集成Docker

目录 1、前言 2、开启docker远程 2.1、配置远程访问模式 2.2、重启docker服务 2.3、验证 3、Idea配置Docker 3.1、配置证书登录 4、创建Dockerfile 4.1、编写Dockerfile 4.2、配置启动项 4.3、访问接口 1、前言 上一节中&#xff0c;我们介绍了Dockerfile的方式构建…

Mac电脑必备:3款优质系统软件推荐

对于Mac电脑使用者来说&#xff0c;良好的系统软件是确保计算机高效运行和提升使用者体验的关键。无论是日常办公、娱乐还是创意设计&#xff0c;一系列优质的系统软件都能为使用者带来更顺畅、更便捷的操作体验。在本文中&#xff0c;我们将推荐3款在Mac电脑上必备的优质系统软…

数据结构之优先级队列(堆)

文章目录 1.优先级队列概念 &#x1f4ae;2.优先级队列的模拟实现&#x1f4ae;3.常用接口PrinrityQueue介绍&#x1f4ae;4.堆的应用&#x1f4ae; 1.优先级队列概念 &#x1f4ae; 优先级队列 &#xff1a;是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优…

qt采用C++/CLI 方式调用C#dll的封装方法

在qt中调用Cdll一般都可以直接使用&#xff0c;但是在调用C#版dll时&#xff0c;就有些麻烦了。本文采用C/cli封装C#的dll的方式。实现了qt调用C#dll的方法。 .h文件 #pragma once #include <string> //stl库 #include <vector> // stl中vector库//dll生成文件定…