Linux--正则表达式详解

1.1概念

在进行程序设计的过程中,用户会不可避免地遇到处理某些文本的情况。有的时候,用户还需要查找符合某些比较复杂规则的字符串。对于这些情况,如果单纯依靠程序设计语言本身,则往往会使得用户通过复杂的代码来实现。但是,如果使用正则表达式,则会以非常简短的代码来完成


正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串,简单的说,正则表达式就是用在字符串的处理上面的一项表示式。由于正则表达式语法简练,功能强得到了许多程序设计语言的支持,包括Java、C++、Perl以及Shell等

1.2基本正则表达式

基本正则表达式(Basic Regular Expression,BRE),又称为标准正则表达式,是最早制订的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX规范制订的两种正则表达式诺法标准之一,另外一种语法标准称为扩展正则表达式

1.2.1常见元字符

元字符						说明
^						以某个字符开头
$						以某个字符结尾
.						匹配任意单字符
*						对前一项进行0次或者多次重复
{m,n}					匹配将前一项字符重复m-n次,{m,},,n},{m,n}
[]						对方括号内的单字符进行匹配
[^]						不匹配方括号内的单字符
^[]						匹配以某个字符开头的行
()						定义一个子表达式
词首【\<或\b】【\>或\b】	其后面的任意字符必须作为单词首部出现;其前面的任意字符必须作单词和词尾锚定为尾部出现
\						转义字符,让一些特殊符号失效

1.2.2POSIX字符类

POSIX字符类是一个形如[:...:]的特殊元序列(metasequence),他可以用于匹配特定的字符范国

1.2.3示例

[ab]:检索包含a或包含b的行信息,注意:[ ]只能表示一个对象

# 检索包含d或者D行的信息
[root@server ~]# grep -n [dD] /etc/passwd#检索字母包含o的行信息
[root@server ~]# grep -n [oo] /etc/passwd

[^] :检索不包含关键字的行信息(反向着色)

# 检索不包含字母o的的行信息
[root@server ~]# grep -n [^o] /etc/passwd# 检索不以r开头的前不包含oot的行信息
[root@server ~]# grep -n  [^r]oot /etc/passwd

[-] : 检索范围如[0-9] [a-z] [A-Z] [a-zA-Z] [0-9a-zA-Z]

# 检索包含7-9的数字行信息
[root@server ~]# grep -n  [7-9] /etc/passwd# 检索包含大写字母
[root@server ~]# grep -n  [A-Z] /etc/passwd#检索数字和字母的行信息
[root@server ~]# grep -n [[:alnum:]] /etc/passwd
[root@server ~]# grep -n  [0-9a-zA-Z] /etc/passwd

^行首与$行尾

# 检索root开头的行信息
[root@server ~]# grep -n ^root /etc/passwd# 检索以#开头的信息
[root@server ~]# grep -n ^# /etc/sos/sos.conf # 检索[开头的行信息
[root@server ~]# grep -n "^\["  /etc/sos/sos.conf #检索数字结尾的行信息
[root@server ~]# grep -n [0-9]$ /etc/sos/sos.conf 
6:#verbose = 3
9:#log-size = 15
[root@server ~]# grep -n "[0-9]$"  /etc/sos/sos.conf # 检索空白行
[root@server ~]# grep -n "^$"  /etc/sos/sos.conf # 注意
# 检索不包含r o t 
[root@server ~]# grep -n [^root] /etc/passwd
# 检索以r o t 开头的行信息
[root@server ~]# grep -n ^[root] /etc/passwd
# 检索以root开头的行信息
[root@server ~]# grep -n ^root /etc/passwd

点(.)和(*)

# 检索以r开头t结尾中间包含2个字母的行信息
[root@server ~]# grep -n r..t  /etc/passwd# 检索至少包含一个字母w的行信息
[root@server ~]# grep -n ww*  /etc/passwd# 检索至少包含俩个oo的行信息
[root@server ~]# grep -n ooo*  /etc/passwd# 检索以包含.的行信息
[root@server ~]# grep -n "\."  /etc/passwd

1.3拓展正则表达式

1.3.1概念

扩展正则表达式(Extended Regular Expression,ERE)支持比基本正则表达式更多的元字符,但是扩展正则表达式对有些基本正则表达式所支持的元字符并不支持。前面介绍的元字“[“以及”[^]”这6个元字符在扩展正则表达式都得到了支持,并且其意义和用法都完全相同,不再重复介绍。接下来重点介绍一下在扩展正则表达式中新增加的一些元字符。

元字符		     说明
?				 将前一项字符进行0次或者1次的重复匹配
+                将前一项进行1次或者多次的重复匹配
(|)			 匹配(|)符号左边或者右边的字符

1.3.2示例

# 显示文件以bash结尾的行信息
[root@server ~]# grep -n bash$ /etc/passwd# 找出仅包含三位数或者四位数的行信息
[root@server ~]# grep -n "\<[0-9]\{3,4\}\>" /etc/passwd
[root@server ~]# grep -n "\<[[:digit:]]\{3,4\}\>" /etc/passwd# 检索/etc/grub2.cfg文件中检索至少一个空白字符开头后跟非空字符的行
[root@server ~]# egrep -n "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg 
[root@server ~]# grep -n  "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg 
[root@server ~]# grep -nE  "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg 
#解释
#	^[[:space:]]:以空白字符开头
#	至少出现一次
#	[^[:space:]]:不包含空白字符
#	-E:支持启用扩展正则
# 查看端口号
[root@server ~]# netstat -tan#检索netstat -tan  显示信息中包含LISTEN后跟上0个或多个空白字符结尾方行信息
[root@server ~]# netstat -tan | grep "LISTEN[[:space:]]*$“
# *$:重复前面内容0次或多次作为行结尾#检索fdisk -l显示内容中包含以/dev开头后跟上n的相关信息
[root@server ~]# fdisk -l | grep ^/dev/n# 检索/proc/meminfo文件中,所有以大写A或者大写S开头的行信息
[root@server ~]# grep -n ^[AS]  /proc/meminfo # 显示/etc/passwd 文件中root、sshd、chrony的相关信息
[root@server ~]# grep -nE "(root|sshd|chorny)"   /etc/passwd
[root@server ~]# egrep -n "(root|sshd|chorny)"   /etc/passwd# 检索ifconfig命令显示结果中的1-255的整数共
[root@server ~]# ifconfig | grep -oE "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>" 
[root@server ~]# ifconfig | grep -o  "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>" # 检索1dd /usr/bin/cat 命令结果中的文件路径
[root@server ~]# ldd /usr/bin/cat | grep -Eo  /[^[:space:]]+
/lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2

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

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

相关文章

[7] CUDA之常量内存与纹理内存

CUDA之常量内存与纹理内存 1. 常量内存 NVIDIA GPU卡从逻辑上对用户提供了 64KB 的常量内存空间&#xff0c;可以用来存储内核执行期间所需要的恒定数据常量内存对一些特定情况下的小数据量的访问具有相比全局内存的额外优势&#xff0c;使用常量内存也一定程序上减少了对全局…

Spring Cloud 面试题(五)

1. Eureka的自我保护模式是什么&#xff1f; Eureka的自我保护模式是一种应对网络异常的安全保护措施&#xff0c;旨在防止因网络分区或其他异常情况导致服务实例被错误地注销。当Eureka Server在短时间内丢失过多的客户端心跳时&#xff0c;会触发自我保护机制。以下是自我保…

行为型模式 (Python版)

模板方法模式 """案例&#xff1a;写简历内容&#xff1a;最近有个招聘会&#xff0c;可以带上简历去应聘了。但是&#xff0c;其中有一家公司不接受简历&#xff0c;而是给应聘者发了两张公司自己定制的简历表&#xff0c;分别是A类型的简历表和B类型的简历表…

汽车液态电池充电时,充电时的化学反应是怎样的? 电池电量是怎么充满的?

标签: 汽车液态电池充电时的化学反应; 电池充电过程;锂电池,石墨负极 问题:汽车液态电池充电时,充电时的化学反应是怎样的? 电池电量是怎么充满的? 汽车液态电池充电时的化学反应 汽车液态电池(如锂离子电池)在充电时,通过电化学反应将电能转化为化学能并储存在电…

C++ 时间处理-统计函数运行时间

1. 关键词2. 问题3. 解决思路4. 代码实现 4.1. timecount.h4.2. timecount.cpp 5. 测试代码6. 运行结果7. 源码地址 1. 关键词 C 时间处理 统计函数运行时间 跨平台 2. 问题 C如何简单便捷地实现“函数运行时间的统计”功能&#xff1f; 3. 解决思路 类的构造函数&#x…

使用python对指定文件夹下的pdf文件进行合并

使用python对指定文件夹下的pdf文件进行合并 介绍效果代码 介绍 对指定文件夹下的所有pdf文件进行合并成一个pdf文件。 效果 要合并的pdf文件&#xff0c;共计16个1页的pdf文件。 合并成功的pdf文件&#xff1a;一个16页的pdf文件。 代码 import os from PyPDF2 import …

深入理解 Spring Web 应用程序初始化流程

前言 在构建基于 Spring 的 Web 应用程序时&#xff0c;了解初始化流程是至关重要的。本文将详细介绍 Servlet 容器的初始化过程&#xff0c;并重点探讨 Spring 框架在其中的作用&#xff0c;特别是 ServletContainerInitializer、SpringServletContainerInitializer 和 WebAp…

源码部署ELK

目录 资源列表 基础环境 关闭防护墙 关闭内核安全机制 修改主机名 添加hosts映射 一、部署elasticsearch 修改limit限制 部署elasticsearch 修改配置文件 单节点 集群(3台节点集群为例) 启动 二、部署logstash 部署logstash 添加配置文件 启动 三、部署kiban…

数据清洗操作及众所周知【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 前面的博客 数据分析—技术栈和开发环境搭建 …

问题排查复盘

5月份中旬一天晚上&#xff0c;业务需求上线后反馈&#xff0c;该业务对应的搜索功能有问题&#xff0c;晚上10点多开始排查&#xff0c;到凌晨2点&#xff0c;最后大致定位了问题&#xff0c;并行修改后恢复&#xff0c;虽然问题不是很大&#xff0c;但是当时上线的业务对业绩…

抖音a-bogus加密解析(三)

要补的环境我给提示&#xff0c;大家自行操作&#xff0c;出了问题就是因为缺环境&#xff0c;没补好 window global; // reading _u未定义 window.requestAnimationFrame function () {} // XMLHttpRequest 未定义 window.XMLHttpRequest function () {} window.onwheelx …

Vue3实战笔记(45)—VUE3封装一些echarts常用的组件,附源码

文章目录 前言一、柱状图框选二、折线图堆叠总结 前言 日前使用hooks的方式封装组件&#xff0c;在我使用复杂的图标时候遇到了些问题&#xff0c;预想在onMounted中初始化echarts&#xff0c;在使用hooks的时候&#xff0c;组件没有渲染完&#xff0c;使用实例会出现各种各样…

Qt Creator(1)【概述篇】

阅读导航 引言一、Qt概述1. 什么是Qt2. Qt的发展史3. Qt支持的平台4. Qt的优点5. Qt的应用场景 二、Qt下载安装 引言 在探索编程和软件开发的旅程中&#xff0c;我们已经奠定了坚实的基础&#xff0c;通过学习C语言和C&#xff0c;我们不仅掌握了结构化编程和面向对象编程的核…

HIVE3.1.3+ZK+Kerberos+Ranger2.4.0高可用集群部署

目录 一、集群规划 二、介质下载 三、基础环境准备 1、解压文件 2、配置环境变量 四、配置zookeeper 1、创建主体 2、修改zoo.cfg 3、新增jaas.conf 4、新增java.env 5、重启ZK 6、验证ZK 五、配置元数据库 六、安装HIVE 1、创建Hiver的kerberso主体 2…

网站笔记:huggingface model memory calculator

Model Memory Utility - a Hugging Face Space by hf-accelerate 这个工具可以计算在 Hugging Face Hub上托管的大型模型训练和执行推理时所需的vRAM内存量。模型所需的最低推荐vRAM内存量表示为“最大层”的大小&#xff0c;模型的训练大约是其大小的4倍&#xff08;针对Adam…

LeetCode 第399场周赛个人题解

100323. 优质数对的总数 I 原题链接 100323. 优质数对的总数 I 思路分析 签到题 AC代码 class Solution:def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int:n, m len(nums1), len(nums2)ret 0for i in range(n):for j in range(m):if nu…

关于构建生成式AI产品的思考

在过去的六个月里&#xff0c;我们 LinkedIn 的团队一直在努力开发一种新的人工智能体验。我们希望重新构想我们的会员如何进行求职和浏览专业内容。 生成式人工智能的爆炸式增长让我们停下来思考一年前不可能实现的事情。我们尝试了许多想法&#xff0c;但都没有真正实现&…

1.2 程序员职业发展

目录 1 程序员职业发展方向 2 计算机研究生为何青睐AI赛道 1 程序员职业发展方向 2 计算机研究生为何青睐AI赛道 计算机类研究生&#xff0c;大部分以人工智能作为主赛道&#xff0c;原因如下&#xff1a; 广阔的就业前景&#xff1a;人工智能是当今科技发展的前沿领域&…

7.Redis之String编码方式应用场景业务

1.内部编码 字符串类型的内部编码有 3 种&#xff1a; • int&#xff1a;8 个字节&#xff08;64位&#xff09;的⻓整型。 • embstr&#xff1a;⼩于等于 39 个字节的字符串。压缩字符串.适用于表示比较短的字符串。 • raw&#xff1a;⼤于 39 个字节的字符串。普通字…