shell脚本正则表达式

目录

[一. 正则表达式定义](#一. 正则表达式定义)

[二. 基本正则表达式](#二. 基本正则表达式)

[1. 元字符](#1. 元字符)

[2. 表示次数](#2. 表示次数)

[3. 位置锚定](#3. 位置锚定)

[4. 分组或其他](#4. 分组或其他)

[二. 拓展正则表达式](#二. 拓展正则表达式)

[1. 表示次数](#1. 表示次数)

[2. 表示分组](#2. 表示分组)


一. 正则表达式定义

正则表达式(REGEXP ):由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能。

区别:①. 正则表达式:匹配的是文章中的字符。

②. 通配符:匹配的是文件名。

正则表达式分为:基本正则表达式、扩展正则表达式。

二. 基本正则表达式

基本正则表达式:①. 元字符

②. 表示次数

③. 位置锚定

④. 分组和其他

1. 元字符

bash 复制代码
.               #匹配任意单个字符,可以是一个汉字  
[]              #匹配指定范围内的任意单个字符
[^]             #匹配指定范围外的任意单个字符

注意:
. 在 [ ] 中就是.

[:alnum:]       #字母和数字
[:alpha:]       #代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:]       #小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:]       #大写字母
[:blank:]       #空白字符(空格和制表符)
[:space:]       #包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白
[:cntrl:]       #不可打印的控制字符(退格、删除、警铃...)
[:digit:]       #十进制数字
[:xdigit:]      #十六进制数字
[:graph:]       #可打印的非空白字符
[:print:]       #可打印字符
[:punct:]       #标点符号

\w              #匹配单词构成部分,等价于[_[:alnum:]]
\W              #匹配非单词构成部分,等价于[^_[:alnum:]]
\S              #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s              #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]

2. 表示次数

bash 复制代码
*       #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.*      #任意长度的任意字符,不包括0次
\?      #匹配其前面的字符出现0次或1次,即:可有可无
\+      #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\}   #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\}  #匹配前面的字符至多n次,<=n
\{n,\}  #匹配前面的字符至少n次

3. 位置锚定

bash 复制代码
^               #行首锚定, 用于模式的最左侧
$               #行尾锚定,用于模式的最右侧
^PATTERN$       #用于模式匹配整行 (单独一行  只有root)
^$              #空行
^[[:space:]]*$  #空白行


\< 或 \b        #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\> 或 \b        #词尾锚定,用于单词模式的右侧
\<PATTERN\>     #匹配整个单词

4. 分组或其他

分组:() 将多个字符捆绑在一起,当作一个整体处理,如:(root)+

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

方式为: \1, \2, \3, ...

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

二. 拓展正则表达式

1. 表示次数

bash 复制代码
*      #匹配前面字符任意次
?      #0或1次
+      #1次或多次
{n}    #匹配n次
{m,n}  #至少m,至多n次
{,n}   #匹配前面的字符至多n次,<=n,n可以为0
{n,}   #匹配前面的字符至少n次,<=n,n可以为0

2. 表示分组

bash 复制代码
()      #分组,将多个字符捆绑在一起,当作一个整体处理
\1, \2, #向后引用
|       #或者  
a|b     #a或b
C|cat   #C或cat
(C|c)at #Cat或cat
相关推荐
ltl4 小时前
存储性能建模:IOPS、吞吐与延迟
linux
九硕智慧建筑一体化厂家4 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
刘某的Cloud5 小时前
ceph osd 导入导出 rbd volume 卷
linux·运维·ceph·volume
酸菜。7 小时前
dw_axi_dmac总结
linux
神奇霸王龙7 小时前
Agent 准入门控屠夫:5 旗舰 4 维度评估
linux·运维·数据库·ai·ai作画·agent·ai编程
cfm_29148 小时前
基于Binlog实现不停机数据库平滑迁移技术
运维·数据库·架构
迪康Defender8 小时前
AI 重构终端安全运营:智能分析中枢 AI Insight 模块架构与落地场景深度解析
运维·网络·人工智能·其他·安全·重构·架构
HiDev_10 小时前
【非标自动化】2、认识元器件(固态继电器)
运维·自动化
明达智控技术10 小时前
国产 PLC 落地立库自动化,MC5000边缘智能控制器破局
运维·自动化
小绫网络安全10 小时前
Kali Linux渗透测试入门教程:从零搭建到实战攻防
linux·运维·服务器