Linux:Shell编程之正则表达式

目录

绪论

1、正则表达式

1.1 通配符

1.2 正则表达式分类

1.3 基本正则

1.4 正则表达式中表示次数的表达式

1.5 位置锚定

1.5.1 词首锚定和词尾锚定

1.6 分组()

1.7  逻辑或

1.8 扩展正则


绪论

正则表达式:有一类特殊字符以及文本字符所编写的一种模式,用来处理文本当中的内容,其中的一些字符不表示字符的字面含义,表示控制或者通配的功能

通配符:只能匹配文件名与目录名,不能匹配文件的内容

1、正则表达式

1.1 通配符

只能匹配文件名与目录名,不能匹配文件的内容

*匹配任意一个或者多个字符
touch  1.txt  2.txt  3.txt
ls *.txt?匹配任意一个字符(就是匹配单个字符)
ls ?.txt[ ] 匹配范围内的任意单个字符
touch {a..z}.txt
ls [a-n].txt

1.2 正则表达式分类

· 基本正则表达式

· 扩展正则表达式 

1.3 基本正则

字符匹配,元字符

. 匹配任意的单个字符,可以是一个汉字,\表示转义符,\.就是一个点 

eg:ls  |  grep  "12."  输出为123.txt

"()括号表示分组的意思",\(\)就是括号

eg:"[]"匹配指定范围内的任意单个字符

ls  |  grep  "[0-9]"

eg:大小写和数字一起匹配

ls  |  grep  "[0-9A-Za-z]"

eg:"[^]"取反,指定范围之外的

ls  |  grep  "[^A-Z]"

[[:space:]]包含空格,tab键,换行的空格,回车的空格

[[:blank:]] 空白字符(空格和tab制表符)

eg:以rc开头的任意单个字符0-6的数字

ls  /etc  |  grep  "rc[0-6]"

eg:只匹配以rc开头的文件,.不是正则

ls  /etc  |  grep  "rc\."

通配符不能完全匹配大小写, 正则可以

1.4 正则表达式中表示次数的表达式

" * "匹配前面的字符任意次,0次也行,无数次也行,有多少匹配多少(贪婪模式),没有也行

eg:

echo  goole  |  grep  "go*gle"  输出为google

echo  ggle  |  grep  "go*gle"  输出为ggle

" .* "匹配任意长度的字符,至少要有一次,不包括0次

eg:

echo  goole  |  grep  "go.*gle"  输出为google

echo  ggle  |  grep  "go.*gle"  此时匹配不到

" \?"匹配前面的字符0次或者一次,可有可无

" \+ " 匹配前面的字符至少1次,最多可以无数次

eg:

echo  ggle  |  grep  "go\+gle"

\{n\}匹配前面的字符等于n次,必须连续出现才能匹配

eg:echo  gogle  |  grep  "go\{|\}gle"

\{m,n\}匹配前面的字符,最少m次,最多n次

\{,n\}匹配前面的字符,最多n次(只要出现几次,出现都算,除非没有,只要前面的字符有,都算)

eg:echo  ggle  |  grep  "go\{,3}gle"

\{n,\}匹配前面的字符至少n次

1.5 位置锚定

^ 以什么为开头,在模式的左侧  

eg:cat  /etc/passwd  |  grep  "^root"

$ 以什么为结尾,在模式的右侧 r$表示以r为结尾

^root$ 用于匹配整行,而且整行中只有以后个root

^$ / ^[[:space:]]$  匹配空行

1.5.1 词首锚定和词尾锚定

词首锚定 \< 或者 \b

词尾锚定 \> 或者 \b   

根据\b的前后位置判断

eg:echo  hello-123  |  grep  "123\b"

输出为标红的hello-123

echo  hello-123  |  grep  "\bhello"

输出为标红的hello-123

\<root\> 表示匹配整个单词

1.6 分组()

echo  abccc  |  grep  "abc\{3\}"

输出为abccc

\{n\}表示正好出现n次,n次表示前面的字符必须要连续出现才能匹配

\{,n}只要你出现几次都算,除非没有

eg:echo  golgogle  |  grep  "\(go  \)\{}\}gle"

输出为gogle

\(go\)是一个租,连续的go只出现一个,两个不连续的go都出现

1.7  逻辑或

\|:斜杠管道符表示逻辑或

echo  | abc2abc  |  grep  "(1\|2\)abc"

1.8 扩展正则

不用写斜杠了

需要使用grep  -E 或者egrep

echo  1abc2abc  |  grep  -E  "(1|2)abc"

匹配邮箱号码  :

vim  /opt/pipei.txt

cat  pipei.txt  |  grep  -E "[0-9a-z]{9,11}@[0-9a-z]{2,3}\.[a-z]{2,3} 

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

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

相关文章

淘宝商品详情接口(商品列表,APP详情接口)返回示例说明,PC端和APP端

淘宝商品详情包括以下信息&#xff1a; 1. 商品标题&#xff1a;商品的名称或标题&#xff0c;用于描述商品的特点和功能。 2. 商品价格&#xff1a;商品的销售价格&#xff0c;包括原价和促销价等。 3. 商品图片&#xff1a;展示商品的照片或图像&#xff0c;以便顾客可以更…

项目实战 — 消息队列(5){统一硬盘操作}

前面已经使用数据库管理了交换机、绑定、队列&#xff0c;然后又使用了数据文件管理了消息。 那么&#xff0c;这里就创建一个类&#xff0c;讲之前的两个部分整合起来&#xff0c;对上层提供统一的一套接口&#xff0c;表示硬盘上存储的所有的类的信息。 /* * 用这个类来管理…

C#随机法 双峰函数 求极值 避免落入局部最优解

避免落入局部最优解&#xff0c;只要让步长够长即可。 x1 resultX1 random1.NextDouble()*100; 如果后面不乘以100&#xff0c;则很大概率落入负数的最大值 Random random1 new Random(DateTime.Now.Millisecond);double x1 0, resultX10,max-999999,maxTemp0;for (int i …

Arcgis中直接通过sde更新sqlserver空间数据库失败

问题 背景 不知道有没有人经历过这样一个情况,我们直接在Arcgis中通过sde更新serserver数据库会失败,就是虽然在sde更新sqlserver数据库,但是在Navicat中通过sql语句来查询,发现数据并没有更新,如:上图中,更新数据库后,第一张图是sde打开的sqlserver数据库,它的数据库…

MySQL缓存策略

文章目录 一、MySQL缓存方案的作用二、提高MySQL访问性能的方式2.1 读写分离2.1.1 是什么&#xff1f;2.1.2 解决了什么&#xff1f;2.1.3 原理是什么&#xff1f; 2.2 连接池2.1.1 是什么&#xff1f;2.1.2 解决了什么&#xff1f;2.1.3 原理是什么&#xff1f; 2.3 异步连接2…

小体积,大能量!邂逅飞凌OKMX6ULL开发板

机缘巧合参加了飞凌嵌入式的试用活动&#xff0c;也很幸运被任命为新品体验官&#xff0c;那么看下是哪一款核心板和底板吧。 →核心板&#xff1a;FETMX6ULL-C核心板 FETMX6ULL-C核心板采用NXP i.MX6ULL处理器开发设计&#xff0c;采用低功耗的ARM Cortex-A7架构&#xff0c…

婚恋交友h5多端小程序开源版开发

婚恋交友h5多端小程序开源版开发 以下是婚恋交友H5多端小程序的功能列表&#xff1a; 用户注册和登录&#xff1a;用户可以通过手机号码或第三方账号注册和登录。个人信息填写&#xff1a;用户可以填写个人基本信息&#xff0c;包括姓名、性别、年龄、身高、体重、学历、职业等…

一台阿里云服务器怎么部署多个网站?以CentOS系统为例

本文阿里云百科介绍如何在CentOS 7系统的ECS实例上使用Nginx搭建多个Web站点。本教程适用于熟悉Linux操作系统&#xff0c;希望合理利用资源、统一管理站点以提高运维效率的用户。比如&#xff0c;您可以在一台云服务器上配置多个不同分类的博客平台或者搭建多个Web站点实现复杂…

【论文阅读】基于深度学习的时序预测——Non-stationary Transformers

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…

【hello C++】智能指针

目录 一、内存泄漏 1.1 什么是内存泄漏&#xff0c;内存泄漏的危害 1.2 内存泄漏分类 1.3 如何检测内存泄漏 1.4 如何避免内存泄漏 二、智能指针的使用及原理 2.1 RAII 2.2 智能指针的原理 2.3 智能指针的发展历程 2.4 智能指针的模拟及实现 三、shared_ptr 常见的问题 3.1 线程…

如何在页面中嵌入音频和视频?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 嵌入音频⭐ 嵌入视频⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏…

在Ubuntu中使用Docker启动MySQL8的天坑

写在前面 简介&#xff1a; lower_case_table_names 是mysql设置大小写是否敏感的一个参数。 1.参数说明&#xff1a; lower_case_table_names0 表名存储为给定的大小和比较是区分大小写的 lower_case_table_names 1 表名存储在磁盘是小写的&#xff0c;但是比较的时候是不区…