【Linux】正则表达式

正则表达式是一种可供Linux工具过滤文本的自定义模板,Linux工具(如sed、gawk)会在读取数据时使用正则表达式对数据进行模式匹配。

正则表达式使用元字符来描述数据流中的一个或多个字符。它是由正则表达式引擎实现的。正则表达式引擎是一种底层软件,负责解释正则表达式并用这些模式进行文本匹配。

最流行的正则表达式引擎有两种:

POSIX基础正则表达式(basic regular expression,BRE)引擎;

POSIX扩展正则表达式(extended regular expression,ERE)引擎。

一、BRE模式

 最基本的BRE模式是匹配数据流中的文本字符。

1、普通文本

正则表达式匹配的第一条原则:区分大小写

正则表达式中也可以使用空格数字

 2、特殊字符

正则表达式能识别的特殊字符如下:

* [] ^ $ {} \ + ? | ()

 如果要将某个特殊字符视为普通字符,则必须用反斜线(\)将其转义。

# 匹配文本中的美元符号$
sed -n '/\$/p' test1.txt

转义反斜线(\)

正斜线(/) 虽然不属于正则表达式中的特殊字符,但也需要进行转义,否则会报错。

3、锚点字符

 有两个特殊字符可以用来将正则表达式模式锁定在数据流中的行首或者行尾,这两个特殊字符被称为锚点字符。

锚定行首

脱字符(^)可以指定位于数据流中文本行行首的模式,如果模式出现在行首之外的其它地方,则正则表达式无法匹配。

使用脱字符时必须将其置于正则表达式之前

如果将脱字符放在正则表达式开头之外的位置,sed就会将其视为普通字符进行匹配。

如果只是匹配脱字符,则不用进行转义。

如果要匹配脱字符及其它文本,则需要将脱字符进行转义。

锚定行尾

 特殊字符美元符号($)定义了行尾锚点。将其放在正则表达式之后则表示数据行必须以该模式结尾

 组合锚点

查找只含有特定文本模式的数据行。

将两锚点直接组合在一起,之间不加任何文本,可以过滤出数据流中的空行

如下所示,指定的正则表达式会查找行首和行尾之间什么都没有的那些行,由于空行在两个换行符之间没有文本,所以正好被匹配到。

这是一种从文本中删除空行的一种不错的方法。

sed '/^$/d' test1.txt

4、点号字符

 点号字符匹配除换行符以外的任意单个字符,它必须匹配一个字符

5、字符组

 可以在正则表达式中定义用来匹配某个位置的一组字符。如果字符组中的某个字符出现在了数据流中,那就匹配成功。

方括号用于定义字符组,在方括号中加入希望出现在该字符组中的所有字符,就可以在正则表达式中像其它字符一样使用字符组了。

不确定某个字符的大小写时:

 在单个正则表达式中可以使用多个字符组

字符组中也可以使用数字

6、排除型字符组

 可以反转字符组的作用,即匹配字符组中没有的字符。只需在字符组的开头添加脱字符即可。

如下所示,匹配除c或h之外的任何字符以及文本模式。其中空格也能被匹配到。

7、区间

 可以使用单连字符在字符组中表示字符区间。

还可以在字符组内指定多个不连续的区间。

如下所示,指定的范围是1到4个7到9。

 8、特殊字符组

BRE有一些特殊的字符组。

BRE特殊字符组
[[:alpha:]]匹配任意字母字符,无论是大写还是小写
[[:alnum:]]匹配任意字母数字字符,0~9,A~Z或a~z
[[:blank:]]匹配空格或制表符
[[:digit:]]匹配0~9中的数字
[[:lower:]]匹配小写字母a~z
[[:upper:]]匹配大写字母A~Z
[[:print:]]匹配任意可打印字符
[[:punct:]]匹配标点符号
[[:space:]]匹配任意空白字符:空格、制表符、换行符、分页符、回车符、垂直制表符

这些特殊字符组的用法和普通字符组的用法一样

9、星号*

 匹配次数大于等于0次。

这个特殊符号常用于处理有常见拼写错误或在不同语言中有拼写变化的单词。

 点号字符星号字符组合起来,能够匹配任意数量的任意字符,一般用在数据流中两个可能相邻或不相邻的字符串之间。

星号还能用于字符组,指定可能在文本中出现0次或多次的字符组或字符区间。

不能出现字符组以外的其它字符,否则就无法匹配到。

 二、ERE模式

gawk支持ERE模式,但sed不支持。前者可以使用大多数扩展的正则表达式符号,并能提供一些sed所不具备的额外过滤功能,但正因为如此,也使得gawk在处理数据时较慢。

1、问号?

匹配0次1次,不能匹配超过1次的多次。

问号也可以和字符组一起使用:如果字符组中的字符出现了0次或1次,就能匹配上;如果两个字符都出现或者其中一个出现了两次及以上,就不能匹配上。

2、加号+

 匹配1次或多次,必须至少1次。

它也可以用于字符组上,用法和星号、问号一样。

3、花括号{}

 可为正则表达式指定字符或字符组出现的可重复次数,称之为区间,有以下两种方式:

  • m:正则表达式恰好出现m次;
  • m,n:正则表达式至少出现m次,至多出现n次。

默认情况下,gawk不识别正则表达式区间,必须指定gawk的命令行选项--re-interval才行。

如下所示,只匹配一次e:

可以同时指定区间的下限上限

也可以用在字符组上:

字母a或e在文本模式中只出现了1~2次,则正则表达式匹配成功,否则,不成功。

字母a和e出现的次数加起来最多只能是2次。

 4、竖线符号|

竖线符号允许在检查数据流时,以逻辑OR方式指定正则表达式引擎要使用的两个或多个模式。如果其中任何一个模式成功匹配,就视为匹配成功,否则,则匹配失败。

格式:expr1|expr2|...

正则表达式和竖线符号之间不能有空格,否则竖线符号会被认为是正则表达式模式的一部分, 

 竖线符号两侧的子表达式可以采用正则表达式可用的任何模式符号,包括字符组。

如下所示,该正则表达式可以匹配cat、hat和dog。

5、正则表达式分组

 可以用圆括号对正则表达式进行分组。分组之后,每一组都会被视为一个整体,可以像对普通字符一样对该组应用特殊字符。

如下所示,该正则表达式可以让正则表达式能够匹配Sunday或者Sun。

 最常见的用法是将分组竖线符号结合起来。

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

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

相关文章

数据平台浅理解

定义 数据平台架构是指用于收集、存储、处理和分析数据的一系列组件、技术和流程的整体架构设计。它就像是一个复杂的数据生态系统的蓝图,旨在高效地管理数据从产生源头到产生价值的整个生命周期。 主要层次 数据源层 这是数据的起点,包含各种类型的数据…

Python入门10:高阶函数

一、什么是高阶函数 1.1、高阶函数的概念和作用: 高阶函数是指 接受函数作为参数 或者 返回函数 作为结果的函数。它在函数式编程中是一个重要概念(函数式编程(Functional Programming , FP )是一 种编程范式&#xf…

浅谈云计算12 | KVM虚拟化技术

KVM虚拟化技术 一、KVM虚拟化技术基础1.1 KVM虚拟化技术简介1.2 KVM虚拟化技术架构1.2.1 KVM内核模块1.2.2 用户空间工具(QEMU、Libvirt等) 二、KVM虚拟化技术原理2.1 硬件辅助虚拟化2.2 VMCS结构与工作机制 三、KVM虚拟化技术面临的挑战与应对策略3.1 性…

GO:GO程序如何处理缓存加载和大数据缓存

如果我们会在程序启动时,需要加载所有数据,最简单的方式就是程序启动,通过轮训从数据库拉取所有数据,并写入到本地缓存中。 问题:数据量较大的时候,程序加载慢,启动时间长,遇到问题不…

【优选算法篇】:分而治之--揭秘分治算法的魅力与实战应用

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:优选算法篇–CSDN博客 文章目录 一.什么是分治算法1.分治算法的基本概念2.分治算法的三个步…

OpenAI Whisper:语音识别技术的革新者—深入架构与参数

当下语音识别技术正以前所未有的速度发展,极大地推动了人机交互的便利性和效率。OpenAI的Whisper系统无疑是这一领域的佼佼者,它凭借其卓越的性能、广泛的适用性和创新的技术架构,正在重新定义语音转文本技术的规则。今天我们一起了解一下Whi…

python+playwright自动化测试(一):安装及简单使用,截图录屏

目录 基本使用 浏览器调用 启用浏览器 创建窗口对象 访问URL 页面的刷新、返回、前进 关闭 截图、录屏、保存pdf 截图 录屏 保存为pdf 设置窗口大小 调试模式 手机模式及new_context的更多参数 手机模式 new_context的其他参数 设置语言和时区 设置和修改位置…

初识C++(二)

六、引用 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 通俗地讲,可以理解为一个人能够拥有多个称呼,这些所有的称呼都是表示这一…

【RedisStack】Linux安装指南

【RedisStack】Linux安装指南.md 前言下载解压创建启动文件设置密码把密码设置到环境变量启动/停止相关命令测试&验证官网资料参考资料 前言 Redis Stack是使用Redis的最佳起点。我们将我们必须提供的最好的技术捆绑在一起,形成一个易于使用的软件包。Redis St…

达梦8-DMSQL程序设计学习笔记1-DMSQL程序简介

1、DMSQL程序简介 DMSQL程序是达梦数据库对标准SQL语言的扩展,是一种过程化SQL语言。在DMSQL程序中,包括一整套数据类型、条件结构、循环结构和异常处理结构等,DMSQL程序中可以执行SQL语句,SQL语句中也可以使用DMSQL函数。 DMSQ…

STM32 FreeRTOS 基础知识

多任务处理 内核是操作系统的核心组件。诸如 Linux 这样的操作系统采用的内核, 看似允许用户同时访问计算机。很明显,多个用户可以同时执行多个程序。 每个执行程序都是受操作系统控制的任务(或线程)。如果一个操作系统能够以这…

T-SQL编程

目录 1、T-SQL的元素 1.1 标识符 1. 常规标识符 2. 分隔标识符 1.2 变量 1. 全局变量 2. 局部变量 1.3 运算符 1. 算数运算符 2. 赋值运算符 3. 位运算符 4. 比较运算符 5. 逻辑运算符 6. 字符串连接运算符 7. 一元运算符 8. 运算符的优先级和结合性 1.4 批处…

js中的Object.defineProperty()详解

文章目录 一、Object.defineProperty()二、descriptor属性描述符2.1、数据描述符2.2、访问器描述符2.3、descriptor属性2.3.1、value2.3.2、writable2.3.3、enumerable (可遍历性)2.3.4、configurable (可配置性) 三、注意事项 一…

【搭建JavaEE】(2)Tomcat安装配置和第一个JavaEE程序

Tomcat–容器(Container) 下载 Apache Tomcat - Welcome! 下载完成 请求/响应 结构 测试 查看Jdk版本 改端口号localhost8080–>8099 学学人家以后牛逼了可以用自己名字当文件夹名 配置端口8099 找到server文件 用记事本打开 再打开另一个logging文件 ”乱码解决“步骤&…

centos7.6 安装nginx 1.21.3与配置ssl

1 安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2 下载Nginx wget http://nginx.org/download/nginx-1.21.3.tar.gz3 安装目录 mkdir -p /data/apps/nginx4 安装 4.1 创建用户 创建用户nginx使用的nginx用户。 #添加www组 # groupa…

高级软件工程-复习

高级软件工程复习 坐标国科大,下面是老师说的考试重点。 Ruby编程语言的一些特征需要了解要能读得懂Ruby程序Git的基本命令操作知道Rails的MVC工作机理需要清楚,Model, Controller, View各司什么职责明白BDD的User Story需要会写,SMART要求能…

TrollFools 2.10-22 插件注入工具 官方版

《TrollFools巨魔设备专用插件注入工具》这是一款专为巨魔设备打造的插件注入神器,功能强大且操作便捷。它能够轻松地将插件注入通过AppStore商店下载的任意APP中,同时也能随时卸载,丝毫不影响APP的正常使用。注入后的APP仍可正常更新&#x…

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <1> 5分钟快速创建一个springboot web项目

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…

arcgis中生成格网矢量带高度

效果 1、数据准备 (1)矢量边界(miain.shp) (2)DEM(用于提取格网标高) (3)DSM(用于提取格网最高点) 2、根据矢量范围生成格网 模板范围选择矢量边界,像元宽度和高度根据坐标系来输入,我这边是4326的,所以输入的是弧度,输出格网矢量gewang.shp 3、分区统计 …

海豚调度DolphinScheduler-3.1.9配置windows本地开发环境

源代码下载地址https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 1.Zookeeper安装与使用 如图下载解压zookeeper安装包&#xff0c;并创建data和log目录 下载地址 https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz 进入…