Linux Shell系列(3) 正则表达式

Linux shell编程入门(3) 正则表达式是一种用于描述字符模式的工具,在Linux Shell中,它就像是一个精准的文本探测器。由普通字符(如字母、数字)和特殊字符(元字符)组成。普通字符就是我们日常使用的字符,例如在查找文本时输入的具体单词;而元字符则具有特殊的含义,能帮助我们定义更灵活的搜索模式。比如,“.” 元字符可以匹配任意单个字符,若要查找以 “c” 开头,后面跟任意一个字符,再以 “t” 结尾的单词,就可以使用 “c.t” 这个正则表达式,它能匹配 “cat”、“cot” 等单词。 阅读详情

正则表达式

正则表达式主要是用来描述一个句法规则的模式。其实说的通俗一点,就是利用字符和元字符的组合,对一些符合既定句法的模式进行模糊匹配。它的主要功能是文本查询和字符串操作。

正则表达式的基本元素包括普通字符和元字符,在Linux shell里面,常用的正则表达式元字符集为:S={*  .  ^  $  []  \  \<\>  \{\}  \{n,\}  \{n,m\} },每一个元字符都有自己在正则表达式中的含义,下面来介绍一下:

“ * ”符号:表示匹配前面一个普通字符0次或多次。注意这里是一个普通字符,即如果是JO*B的话,那么*就匹配字符“O”任意次,而不是匹配“JO”串。

“ . ”符号:表示匹配任意一个字符。字符“ . "就表示一个字符,这个字符可以是任意字符。例如字符串 ...73 就表示前面3个字符为任意字符(包括空格),第4个和第5个字符分别是7和3。

“ ^ ”符号:表示匹配行首。例如:^cloud就表示匹配以cloud字符串开头的所有行。与上面匹配一个字符不一样,这里匹配的是后面跟着的整个字符串。

” $ "符号:表示匹配行尾。例如:cloud$ 就表示匹配以cloud字符串结尾的所有行。结合上面的匹配行首,^$表示匹配空行。

“ [] "符号:表示匹配方括号里面的字符集中的一个。例如:数字0-9中的任意一个数字都满足[0-9]这个表达式。值得注意的是,当^放在[]里面的时候,^就不再表示行首,而是表示取反。如:[^7-9]则表示非7-9中的任意一个数字才满足这个表达式。

” \ “符号:是转义字符。如果你写的正则表达式里面包括元字符,而你又想将它当做普通字符用的话,就要在前面加上转义符号" \ "了。例如:\$就表示一个普通字符”$"。

“\<\>"符号:表示精确匹配<>内的字符,” \ “是用来转义<>这两个字符的。例如:\<the\>表示匹配包含”the“的行,由于精确匹配,所以,”them“,”theory“这些单词所在的行并不会被匹配到。

”\{\}"符号:与" * "类似,表示匹配前面的一个字符任意多次。但是“\{\}”可以指定重复的次数,如\{3\}则表示重复前面的字符3次;\{3,\}表示重复前面的字符至少3次;\{3,5\}表示重复3到5次。例如:JO\{3\}B则表示重复字符O三次,即JOOOB;JO\{3,\}B则表示至少重复O三次,即JOOOB,JOOOOB等都符合;\{3,5\}则匹配JOOOB,JOOOOB,JOOOOOB这几个字符串。

通配符

初学的时候对于正则表达式和通配符的理解很模糊,两个都是可以进行模糊匹配的,到底什么时候用才是正则表达式,什么时候用是通配符呢?其实,我们登录系统之后,系统的bash shell并不支持正则表达式的,也就是说,我们如果使用bash shell的某些命令时使用正则表达式,shell可能会认不出来,只有当我们使用类似grep,sed,awk等工具的时候才有效。所以,我们在使用bash shell的时候也想达到模糊匹配的目的的话,就要使用通配符了。

通配符是使用正则表达式的一些元字符来的,常用的元字符集:E={?  *  []  {}  ^ }。不过,这个通配符的元字符意义跟正则表达式里面的不太一样。例如:

“ * "字符不再表示匹配前面一个字符任意多次,而是表示任意位置的任意字符。例如:phi*ip,则可以匹配philip,phillip,philsaip等开始三个是phi和结尾两位是ip的任意字符。例如ls -l *.awk表示匹配以.awk结尾的所有文件,*表示任意长度任意字符组合。

" ? ”字符才表示任意一个字符。同正则表达式元字符的" . " 

" {} “字符不需要转义。在{}表示的是表达式集合。如:ls -l {[a-h]*.awk,0?.pem}则表示列出所有以a-h字符开头的.awk文件的和以0开头,后面接一个任意字符的.pem文件

" ^ "字符也不是表示行首,而是代表取反。


正则表达式和通配的应用环境上有些不一样,但是都能够达到模糊匹配的效果。在后面介绍到的使用grep,sed和awk等工具对于文件的查找以及各种操作中,正则表达式的匹配作用更加明显。

Linux学习 shell编程 1、linux提供的解释器有哪些:2、bash和sh的关系sh实际就是bash的一个软链接(快捷方式)3、rocky linux 默认解析器是bash。 阅读详情

相关推荐

Linux学习笔记3—Shell

Shell 本质是一个命令行解释器,在用户和内核交互时起翻译作用。外部应用软件通过 Shell 与内核通信。全局变量所有子 Shell 生效env/ printenvenv | grep HOME # 过滤全局变量echo $HOME # 输出家目录局部变量仅当前 Shell 生效set基础操作a=1 # 定义局部变量(等号无空格)export a # 转为全局变量echo $a # 输出变量值unset a # 释放变量。

LHuanxi的博客 1141

【shell】 =~的使用

如下: read -p "need compile OEM installatoin package?yes/[no]" IS_OEM if [[ "Yes" =~ $IS_OEM || "yes" =~ $IS_OEM ]] then ... fi need compile OEM installatoin package?yes/[no]y need compile OEM installatoin package?yes/[no]Y need compile OEM install

daa20的专栏 1万+

深信服技术认证“SCCA-C”划重点:信服云托管云

该认证包括云数据中心基础、云计算基础、云计算关键技术、云计算交付和运维体系、云计算技术商业应用、信服云托管云、深信服超融合HCI、深信服桌面云aDesk、深信服分布式存储EDS、深信服应用交付AD。学习并获得SCCA-C认证后,可以具备深信服产品功能原理与实践,能够根据业务需求,协助完成云产品方案落地与实施;能够根据业务需求,完成深信服云产品的部署和管理的基本工作。为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。

sangfor_edu的博客 613

【环境配置】ubuntu中shell命令不能识别通配符的解决办法之一

今天遇上一个忧桑的问题。配置完编译环境,发现shell脚本或者终端中无法识别通配符”*“,使用时提示如下错误信息: cannot access *: No such file or directory 如下为我使用的解决办法 ,记录下希望帮助到需要的人: 1、查看nullglob配置 运行shopt命令,查看nullglob选型的配置,命令如下: shoptshopt的使用说明可以查阅如

三言两语 5161

PCL 计算点云直线拟合的精度评价标准——直线度

计算点云直线拟合的精度评价标准——直线度

点云侠的博客 1042

【Android面试八股文】Handler如果没有消息处理是阻塞的还是非阻塞的?Looper 为什么要使用死循环?Android中为什么主线程不会因为Looper.loop()里的死循环卡死?

Handler如果没有消息处理是阻塞的还是非阻塞的? Looper 为什么要使用死循环? Android中为什么主线程不会因为Looper.loop()里的死循环卡死?

字节卷动 758

shell使用文件通配符{},变量自动添加单引号,无法识别问题

通过sh -x查看分析,原因为shell自动为该变量添加单引号,导致无法解析。获取一周七天的日期,然后利用通配符,直接查看七天内的文件。

wo1769815的专栏 1290

深入解析Linux驱动开发中的I2C时序及I2C高频面试题

在 I2C 通信中,主设备和从设备的角色有着明确的定义。主设备是发起通信的设备,它负责控制整个通信过程。主设备可以是微控制器、处理器等具有控制能力的设备。

大模型大数据攻城狮的专栏 2763

【Shell教程】二----Shell变量,通配符,转义符

Shell变量 Shell中有三种变量 用户变量,系统变量和特殊变量 其中系统变量和用户变量在第一节已经简单介绍,这里再说一下用户变量命名时(反斜号)``(单引号) ‘’(双引号) ""的区别

Z小旋 4798

基于Simulink的永磁同步电机三闭环(位置/速度/电流)伺服仿真

本文详细介绍了基于Simulink的永磁同步电机三闭环伺服控制系统的设计与实现,针对机器人关节控制场景。系统采用位置环(外环)、速度环(中环)和电流环(内环)的嵌套结构,通过精确的带宽匹配(电流环1kHz、速度环200Hz、位置环20Hz)实现亚微米级位置跟踪。文中提供了完整的Simulink建模步骤,包括主电路搭建、三环PI控制器实现及坐标变换模块,并验证了系统性能:阶跃响应时间35ms,位置误差<0.05°,正弦跟踪误差<0.15°,负载突加恢复时间0.08s。最后提出了参数自适应整定、前馈

amy_mhd的博客 279

RK3568笔记九十四:基于QT的YOLOV5目标检测

基于RK3568平台的实时目标检测应用,使用YOLOv5模型和RKNN推理引擎实现摄像头实时目标检测,并通过Qt界面显示检测结果。主要功能实时摄像头目标检测:从摄像头获取视频流,使用YOLOv5模型进行目标检测RKNN推理加速:利用RK3568内置的NPU进行模型推理加速图形界面显示:使用Qt框架构建用户界面,实时显示检测结果RGA图像处理:使用Rockchip Graphic Accelerator进行图像缩放处理。

522

shell脚本中对于*通配符不识别的解决办法

1、网上最多的办法是在spawn中加入bash -c,如下: #!/usr/bin/expect -f set HOST"192.168.102.1" set USER"codefor" set PASS"codefor" set BOOKFILE"/home/codefor" #upload spawn bash -c"scp *.zip $USER@$HOST:$BOOKFILE" expect { "*password*"{send"$PASS\r";} ...

qq_41119506的博客 3900

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度和坐标系进行编辑修正,下文介绍如何使用CloudCompare修改坐标系和尺度

诺有缸的高飞鸟的博客 2870

Linux系统Shell脚本之shell数组、正则表达式、及AWK

①普通数组②关联数组定义。

2502_90917285的博客 1961

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

十二、Linux Shell脚本:正则表达式

正则表达式就是一套给文本“相亲”的规则,让你不再只能找“张三”,而是能找到所有“姓张、两个字、且名字里不带'伟'”的人。它通过一些“魔术符号”(元字符)来描述模式:比如 . 代表任意字符,* 代表重复任意次,^ 和 $ 则卡住行头行尾。把这些符号组合起来,你就能用grep或sed等工具,从海量文本里精确地捞出你想要的任何格式的数据。

专注于 Agent 工程、AI 产品、Harness Engineering、LLM 算法等方向,OpenMathModel、Nivik 等开源项目作者 6万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Shell正则表达式

正则表达式是一种定义的,用于描述字符排列和匹配模式的一种语法规则,linux系统中的文本处理工具可以借助shell正则表达式处理文本文档。使用正则表达式可以帮助我们快速获取需要的信息,是我们的工作更加简单、方便。

绮梦寒宵的博客 5983

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Linux学习——shell脚本以及正则表达式(十二)

正则表达式是一种用于描述字符串模式的工具,它由一系列字符和特殊符号组成,可以用来匹配、查找、替换符合特定模式的字符串。它就像一个模板,能够帮助我们在大量的文本中快速找到具有某种特征的内容。​正则表达式中的特殊符号有很多,比如^表示匹配字符串的开始,$表示匹配字符串的结束,.表示匹配任意单个字符,*表示匹配前面的字符零次或多次等。例如,^a.*b$这个正则表达式表示匹配以 “a” 开头、以 “b” 结尾,中间包含任意字符的字符串。​以下为正则表达式的语法大全。

m0_74197017的博客 932

linux Shell编程之正则表达式(五)

正则表达式又称正规表达式、常规表达式。在代码中常简写为regex、regexp 或 RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。正则表达式是由普通字符与元字符组成的文字模式。模式用于描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

2501_91344113的博客 1541

Linux Shell中的正则表达式

Linux Shell中的正则表达式正则表达式是什么正则表达式通配符cut命令awk命令sedsort排序命令wc统计命令 正则表达式是什么 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割,匹配,查找及替换操作. 正则表达式 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep,awk,sed等命令可以支持正则表达式. 元字符 作用 * 前一个字符匹配0次或任意多次 ,例如:a.*d会匹配a和d之间有任意字符 . 匹配除了换行符外的任意一

m0_55212193的博客 1280

Linux Shell 正则表达式详解

Linux Shell 正则表达式

promise524的博客 1460

【Linux】【Shell】Shell 正则表达式

这篇文章主要讲 正则表达式.

RadiantJeral的博客 1万+

Linux shell编程之正则表达式与文本处理器

正则表达式又称正规表达式、常规表达式。在代码中常简写为regex、regexp 或 RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法通过一些特殊符号,实现快速查找、删除、替换某个特定字符串常见的文本处理器有(grep pgrep sed awk)以及应用比较广泛的 Python 语言正则表达式具备很强大的文本匹配功能,能够在文本海洋中快速高效地处理文本通过上面几个简单的示例,可以了解到常见的基础正则表达式的元字符主要包括以下几个字符说明。

2501_91557222的博客 1171

Linux_Shell_Shell 中的正则表达式 与 常用正则表达式

在Linux Shell 编程中,我们常需要用到 正则表达式 进行 文件的匹配在本篇文章中,我们对Linux shell 中的正则表达式 做一个总结,方便之后的shell 编写。参考文章:shell编程之正则表达式https://www.cnblogs.com/whc-uestc/p/4700360.htmlshell script 在if 的判断条件正则表达式=~中引号问题https://www...

迎难而上 4万+

Linux中shell的正则表达式

1 正则表达式用来在文件中匹配符合条件的字符串,主要是目的是包含匹配。- grep、awk、sed 等命令可以支持正则表达式。2 通配符用来匹配符合条件的文件名,通配符是完全匹配。- ls、find、cp 之类命令不支持正则表达式,可以借助于shell通配符来进行匹配。.:匹配任意一个字符*:匹配任意内容?:匹配任意一个内容[]:匹配中括号中的一个字符通配符实践。

lsh0411的博客 1078

《Linux Shell》笔记之正则表达式

正则表达式的文法分为3种标准:BRE、ERE 和 ARE。其中 BER 和 ERE 属于 POSIX 标准,ARE 则是由各家定义的扩展BRE:基本正则表达式ERE:在BRE基础上,扩展正则表达式什么是POSIX呢,POSIX Portable Operating System Interface 可移植操作系统接口,  (BRE, ERE)的应用。正则表达式的基本字符匹配:特殊字符(meta c

点测营专栏 3401
上一篇: 本机访问虚拟机web服务器失败的解决办法
下一篇: ubuntu下使用vi是方向键变乱码 退格键不能使用的解决方法
运维小白
博客等级 码龄15年 13粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值