Linux Shell :正则表达式

先来看一句 Shell 代码:

dpkg --list | grep -E -o 'cuda-documentation-[0-9\-]*'
  1. dpkg --listdpkg 是 Debian 系列 Linux 发行版(如 Ubuntu)的包管理工具。--list 选项用于列出所有已安装的软件包。

  2. | :这是一个管道符号,用于将前一个命令的输出作为后一个命令的输入。在这里,dpkg --list 的输出被直接传递给 grep 命令。

  3. grep -E -o 'cuda-documentation-[0-9\-]*'grep 是一个用于在文本中搜索匹配某个模式的命令。

    • -E:这是一个选项,用于启用扩展的正则表达式匹配。
    • -o:这个选项告诉 grep 只输出匹配的部分,而不是整行。
    • 'cuda-documentation-[0-9\-]*':这是要搜索的模式。它匹配任何以“cuda-documentation-”开头,后面跟着 0 个或多个数字或短横线(-)的字符串。

在这里 [0-9\-]* 就是正则表达式。

正则表达式 用来指定字符串的 模式,经常用于搜索-替换操作。

Regular expressions are used to specify patterns of characters。

这里,术语 模式 (pattern),是指一种用于解决特定问题的、可重复使用的解决方案。模式是一种经过验证的、解决特定问题的最佳实践。

在正则表达式中,普通字符匹配自身,特定字符拥有特殊的含义,这些特定字符称为 元字符

元字符 是指有特殊含义的字符。比如字符 ~ 在文本中表示“波浪号”,但在 Shell 环境中,~ 是一个元字符,表示 home 目录。如果要从字面上使用它们,则需要转义,要用到表示转义的元字符 \ ,像 \~ 这样。对比下面的例子:

echo ~

输出:/home/nano

echo \~

输出:~

下面开始介绍正则表达式中的元字符,这也是正则表达式的语法。

正则表达式语法汇总

基本匹配元字符

基本匹配元字符含义
.除新行(newline:\n)字符外,匹配任意的单个字符
^锚:匹配行的开头
$锚:匹配行的末尾
\<锚:匹配单词的开头
\>锚:匹配单词的末尾
[list]字符类:匹配 list 中的任何一个字符
[^list]字符类:匹配不在 list 中的任何一个字符
()组(group):视为一个单独的单元
|或(alternation):匹配选择任意一个
\引用(quote):从字面上解释元字符

注1:锚(anchor),指定正则表达式的开头和结尾,从而匹配特定的字符串或文本。
注2:字符类(character class),在正则表达式中,可以使用方括号([])来定义一个字符类。字符类可以包含一个或多个字符。
注3:引用(quote),它指的是通过特定字符或语法将文本包围起来,以保护文本中的特殊字符不受解释或转义。比如在正则表达式语法中,$ 表示匹配行的末尾,如果想查找的字符串中包含这个符号时怎么办?这时要用 引用 ,即用 \$ 来表示美元符号。

运算符元字符

运算符元字符含义
*匹配(match) 0 次或多次
+匹配 1 次或多次
?匹配 0 次或 1 次
{n}限定(bound):匹配 n 次
{n,}限定:最少匹配 n 次
{,m}限定:最多匹配 m 次
{n,m}限定:最少匹配 n 次,最多匹配 m 次

预定义字符类

字符类含义类似于
[:lower:]小写字母a-z
[:upper:]大写字母A-Z
[:alpha:]大小写字母A-Za-z
[:alnum:]大小写字母、数字A-Za-z0-9
[:digit:]数字0-9
[:punct:]标点符号-
[:blank:]空格或制表符-

使用总则

为了创建正则表达式,需要根据特定的规则将普通字符和元字符组合在一起,然后使用该正则表达式搜索希望查找的字符串

使用举例

匹配任意的单个字符: .

grep 'Har..y' data.txt

搜索文件 data.txt ,查找类似于以下单词的
harley、harxxy、har12y

匹配行:^$

假设 data.txt 文件中有以下 4 行内容:

Harley is smart
Harley
I like Harley
the dog likes the cat

  1. 普通查找
grep 'Harley' data.txt

将输出以下三行:

Harley is smart
Harley
I like Harley

  1. 而如果正则表达式使用 ^ 锚定为匹配行的开头,代码如下:
grep '^Harley' data.txt

将输出以下两行:

Harley is smart
Harley

之所以不选取第三行,是因为第三行中的 Harley 不在一行的开头部分。

  1. 如果正则表达式使用 $ 锚定为匹配行的结尾,代码如下:
grep 'Harley$' data.txt

将输出以下两行:

Harley
I like Harley

之所以不选取第一行,是因为第一行中的 Harley 不在行的结尾部分。

  1. 同时锚定行首和行尾
grep '^Harley$' data.txt

搜索整行就一个单词“Harley”的行,输出:

Harley

小技巧:
grep ‘^$’ data.txt | wc -l
这个命令将统计在 data.txt 文件中的空行数量。

匹配单词:\<\>

grep '\<kn' data.txt      # 以“kn”为开头的单词所在行
grep 'ow\>' data.txt      # 以“ow”为结尾的单词所在行
grep '\<know\>' data.txt  # 包含单词 “know” 的行

需要注意的是,当使用正则表达式时,单词 的定义要比英语中的定义更灵活。在正则表达式中,单词就是一个由字母、数字或者下划线(_)构成的连续字符序列,比如 error_code_5 是合法的单词。

匹配字符类:[list][^list]

. 匹配的是任意的字符,如果需要匹配特定字符,可以将这些字符放在方括号([])中来指定希望搜索的字符。这样的结构就称为一个字符类。

grep 'H[aA]' data.txt

搜索文件 data.txt ,查找所有包含字符 “Ha” 或 “HA” 的

如果特定的字符是一个连续范围,则可以将第一个字符和最后一个字符用连字符(-)分开:

grep 'H[0-9]' data.txt

搜索文件 data.txt ,查找所有包含字符 “H0” 、 “H1” 、… “H9” 的

匹配不在字符类中的字符,只需要在开头的左方括号之后放一个音调符号(^)即可:

grep 'H[^aA]' data.txt

搜索文件 data.txt ,查找所有包含字符 ‘X’,同时后面不跟有 “a” 或 “A”的

预定义字符类:[:xxxx:]

字符类 的特殊用法,预定义一些常用的字符集。

grep '21[[:alpha:]]' data.txt

搜索文件 data.txt ,查找所有包含数字 “21”,后面跟一个小写字母或大写字母的所有行。
注意必须包含第二组方括号。
另外记住的是:每一个预定义字符类只表示一个单独的字符

重复运算符:*+?

grep ':.*:' data.txt  	#包含 1 个冒号,后跟 0 个或多个任意字符,后面再跟 1 个冒号
grep ':.+:' data.txt  	#包含 1 个冒号,后跟 1 个或多个任意字符,后面再跟 1 个冒号
grep ':.?:' data.txt  	#包含 1 个冒号,后跟 0 个或 1 个任意字符,后面再跟 1 个冒号

限定运算符:{n}{n,}{,m}{n,m}

grep '[0-9]{3}' data.txt	#正好匹配 3 个数字
grep '[0-9]{3,}' data.txt	#至少匹配 3 个数字
grep '[0-9]{,5}' data.txt	#最多匹配 5 个数字
grep '[0-9]{3,5}' data.txt	#匹配 3~5 个数字

组(())和或(|

如果希望在文件中搜索包含下述任意一个单词的行:

cat dog bird hamster

可以使用如下命令:

grep '\<(cat|dog|bird|hamster)\>' data.txt

注意使用圆括号(())创建一个组,这将允许我们将整个模式视为一个单元。

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

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

相关文章

关于路由转发

路由表的作用 路由表的作用&#xff1a;目标网络匹配路由表&#xff0c;从相应网络转发&#xff1b;不匹配路由表&#xff0c;丢弃或转发至默认路由器。 路由转发的原理 根据IP地址找到目标网络&#xff0c;由应路由器解封装查看目标网络是否可达&#xff0c;重新封装进行转…

Axure 9 使用 font awesome 字体发布原型

我使用的版本为Font awesome 6.1.1&#xff0c;安装后在axure中新增3个字体 如果直接发布&#xff0c;在没有安装Font awesome的电脑上无法正常显示字体图标&#xff0c;需要在发布前进行设置。 设置方法&#xff1a; 点击共享 点开设置 在字体设置页&#xff0c;填入图中所示…

56. 合并区间 --力扣 --JAVA

题目 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 解题思路 根据区间的起始点对区间进行排序排序后对…

FreeRTOS 消息队列 详解

目录 什么是队列&#xff1f; 消息队列特点 1. 数据入队出队方式 2. 数据传递方式 3. 多任务访问 4. 出队、入队阻塞 消息队列相关 API 函数 1. 创建队列 2. 写队列 3. 读队列 消息队列实操 什么是队列&#xff1f; 队列又称消息队列&#xff0c;是一种常用于任务间…

创建 Edge 浏览器扩展教程(下)

创建 Edge 浏览器扩展教程&#xff08;下&#xff09; 创建扩展教程&#xff0c;第 2 部分1&#xff1a;更新弹出窗口.html以包含按钮2&#xff1a;更新弹出窗口.html在浏览器选项卡顶部显示图像3&#xff1a;创建弹出式 JavaScript 以发送消息4&#xff1a;从任何浏览器选项卡…

全国三维数字化创新设计大赛湖北赛区省赛成功举办

须弥芥子&#xff0c;数字如海。10月14日—15日&#xff0c;2023 年数字科技文化节——第16届全国三维数字化创新设计大赛湖北赛区省赛暨产教联合体大会在武汉软件工程职业学院成功举行。 &#xff08;大赛全体专家领导合影&#xff09; 全国三维数字化创新设计大赛组委会副秘…

Windows 安装 jmeter

注&#xff1a;在安装Jmeter之前&#xff0c;请先检查下电脑有没有装JDK&#xff1a;开始->运行->然后输入cmd->进入命令行界面&#xff0c;输入java -version &#xff0c; 出现以下信息就是此电脑已安装了JDK&#xff1a; 下载地址 http://jmeter.apache.org/downlo…

C/C++程序设计和预处理

个人主页&#xff1a;仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客 专题分栏&#xff1a;C语言疑难_仍有未知等待探索的博客-CSDN博客 目录 一、引言 二、程序的翻译环境和执行环境 1、什么是程序 2、程序的翻译环境 3、程序的执行环境 三、预处理 1、预定义符…

python爬虫分析基于python图书馆书目推荐数据分析与可视化

收藏关注不迷路 文章目录 前言一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、文章目录 前言 随着电子技术的普及和快速发展&#xff0c;线上管理系统被广泛的使用&#xff0c;有很多商业机构都在实现电子信息化管理&#xff0c;图书推荐也不例外&#xff0c…

windows协议详解之-RPC/SMB/LDAP/LSA/SAM域控协议关系

如果你在windows域控环境中&#xff0c;例如企业的网络中开启wireshark抓包&#xff0c;你一定会遇到一大堆各种各样的协议。不同于互联网服务&#xff08;大多基于HTTP&#xff09;&#xff0c;为了实现域控中各种各样的服务&#xff0c;windows的域控环境中采用了非常多的协议…

【JavaEE】Java的文件IO

文件IO操作 Linux 下的文件操作讲解Java中的文件操作 -- 对文件的增删改查Java中对文件内容的操作 -- 读写操作使用案例 Linux 下的文件操作讲解 在我的Linux栏目下有, 如有需要, 点击下面进行跳转: 内存级文件系统语言级别的文教操作磁盘文件 Java中的文件操作 – 对文件的…

程桌面管理软件Apple Remote Desktop mac中文介绍说明

Apple Remote Desktop mac是一款远程桌面管理软件。它可以让用户通过局域网或互联网连接到其他远程计算机&#xff0c;并实时监控和管理这些计算机。 使用Apple Remote Desktop&#xff0c;用户可以轻松远程操作和控制其他计算机的桌面。用户可以在远程计算机上查看、操控和键入…

风力发电功率预测(CEEMDAN-LSTM-CNN-CBAM模型,Python代码)

1.前言 1.1.运行效果&#xff1a;风力发电功率预测&#xff08;CEEMDAN-LSTM-CNN-CBAM模型&#xff0c;Python代码&#xff09;_哔哩哔哩_bilibili 1.2.环境库&#xff1a; 如果库版本不一样&#xff0c; 一般也可以运行&#xff0c;这里展示我运行时候的库版本&#xff0c;是…

J2EE的N层体系结构

J2EE平台采用了多层分布式应用程序模型&#xff0c;实现不同逻辑功能的应用程序被封装到不同的构件中&#xff0c;处于不同层次的构件可被分别部署到不同的机器中。 RMI/IIOP&#xff1a;RMI&#xff08;Remote Method Invocation&#xff0c;远程方法调用&#xff09;是Java的…

C语言每日一题(18)数组匹配

牛客网 BC156 牛牛的数组匹配 题目描述 描述 牛牛刚学会数组不久&#xff0c;他拿到两个数组 a 和 b&#xff0c;询问 b 的哪一段连续子数组之和与数组 a 之和最接近。 如果有多个子数组之和同样接近&#xff0c;输出起始点最靠左的数组。 输入描述&#xff1a; 第一行输…

网络安全https

http是明文的&#xff0c;相当于在网上裸奔&#xff0c;引出了https&#xff0c;大多数网站都转为了https&#xff0c;连非法的赌博网站有的都是https的。 1.https的网站是不是必须让用户装数字证书&#xff1f; 答&#xff1a;分两种&#xff0c;一种是单向认证&#xff0c;像…

【STM32】HAL库ADC多通道精准测量(采用VREFINT内部参考电压)

【STM32】HAL库ADC多通道精准测量&#xff08;采用VREFINT内部参考电压&#xff09; 文章目录 多通道测量VREFINTADC采样周期多通道配置 附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作…

GCE的安装和使用

GCE的安装和使用 GCE的安装使用1. GCE的安装2. GCE的使用补充&#xff1a;一个简单的R脚本——kmerpdf.R&#xff0c;用于绘制kmer的种类和数量分布图 GCE的安装使用 一个基因组评估软件。其他同类型软件Genomescope 1. GCE的安装 Github官网&#xff1a;https://github.com…

【VictoriaMetrics】单机版配置

为方便查看,释义都已翻译成中文,本文配置基于VictoriaMetrics 1.87.1版本 bigMergeConcurrencyint用于大合并的最大 CPU 核数。设置为 0 时使用默认值cacheExpireDuration30m0s

Docker基础知识

文章目录 Docker Docker 一次构建&#xff0c;处处运行&#xff0c;类似于JVM 虚拟机是软件硬件&#xff08;需要Hypervisors实现硬件资源虚拟化&#xff09;&#xff1a; 资源占用大启动慢&#xff08;虚拟机是分钟级&#xff0c;Docker是秒级&#xff09;冗余步骤多 sha2…