shell脚本之正则表达式

1. 正则表达式的介绍

由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。正则表达式被很多程序和开发语言所广泛支持。

2. 正则表达式和通配符的区别

通配符:在Linux中,一般配合find命令用于对文件目录,文件名的查找

正则表达式:匹配文件内容,用于精确筛选信息,可以配合grep,egrep,awk,sed命令进行搭配使用,查找时,也比通配符更加精确。

3. 基础正则表达式常见元字符

正则表达式的功能及类别:

  1. 代表字符

2.表示次数

3.位置锚定

  1. 分组或其他

\ 转义,把一些特殊的符号转换成普通的符号字符,还可以把一些普通字符转换成特殊功能,例:\!、\n、\$等

^ 表示匹配字符串开始的位置,匹配行首,例: ^a、 ^#

表示匹配字符串末尾的位置,匹配行尾,例: word、 # ;\^表示空行

. 匹配任意的单个字符,例: go.d、g..d

* 匹配前面子表达式0次或者多次,贪婪模式所以尽可能长,例: goo*d、go.*d

.* 表示任意长度的任一字符,不包括0次

\?

匹配其前面字符0或1次,可有可无

\+ 匹配其前面字符最少1次,有且大于等于1次

\{n\} 匹配前面的子表达式n次,例:mo\{2\}y、'[0-9]\{ 2\ }'匹配两位及两位以上数字

\{n,\} 匹配前面的子表达式不少于n次,例: mo\{2,\}y、'[0-9]\{2,\}'匹配两位及两位以上数字

\{,n\} 匹配前面的子表达式不多于n次

\{n,m\} 匹配前面的子表达式n到m次(m>=n),例: mo\{2,3\}y、'[0-9]\{2,3\}'匹配两位到三位数字

注: egrep(grep-E)、awk使用{n }、{n, }、{n,m}匹配时"{}"前不用加"\"

\w 匹配包括下划线的任何单词字符

\W 匹配任何非单词字符。等价于"[^A-Za-z0-9_]"。

\d 匹配一个数字字符

\D 匹配一个非数字字符。等价于[^0-9]。

\s 空白符

:alpha:\] 字母,即A-Z,a-z \[:alnum:\] 字母和数字 \[:lower:\] 小写字母,即a-z \[:upper:\] 大写字母,即A-Z \[:blank:\] 空白字符(空格和制表符) \[:space:\] 包括空格、制表符、换行符、回车符等各类型空白 \[:print:\] 可打印字符 \[:punct:\] 标点符号 \[ \] 表示过滤单个字符 ![](https://file.jishuzhan.net/article/1731247381908819969/651ff60e90847f1422483780320fbf3e.webp) \^ 表示匹配字符串开始的位置,匹配行首 ![](https://file.jishuzhan.net/article/1731247381908819969/f4445c9ecd8dab65c4b6752b22d3ff9f.webp) $ 表示匹配字符串末尾的位置,匹配行尾 ![](https://file.jishuzhan.net/article/1731247381908819969/b896c8ae0133e678d92bb25e080af40f.webp) \* 匹配前面子表达式0次或者多次。 ![](https://file.jishuzhan.net/article/1731247381908819969/7f7aa9315cf86d33d92c715bf4bb9a8d.webp) * \\{n\\} 匹配前面的子表达式n次 ![](https://file.jishuzhan.net/article/1731247381908819969/441366b86a111cb56fedefcabd14e10c.webp) * .\* 表示任意长度的任一字符,不包括0次 ![](https://file.jishuzhan.net/article/1731247381908819969/c13fc94eab6b5395c4c3e95462c5deb3.webp) ## 4. 拓展正则表达式 支持的工具: (egrep、awk、grep -E、sed -r) | 字符 | 作用 | |-----|------------------| | + | 表示匹配前面的子表达式1次以上 | | ? | 表示匹配前面的子表达式0或者1次 | | ( ) | 将括号里的内容看成一个整体 | | \| | 以或的方式匹配字符串 | + 表示匹配前面的子表达式1次以上 ![](https://file.jishuzhan.net/article/1731247381908819969/e7aea7e81fb77df97a8a0dff51e4606f.webp) ? 表示匹配前面的子表达式0或者1次 ![](https://file.jishuzhan.net/article/1731247381908819969/e459cf44c9b61c21066813ce7ffa36af.webp) * ( ) 将括号里的内容看成一个整体 ![](https://file.jishuzhan.net/article/1731247381908819969/fbefc4d39f5b5043c42530ebb77aabed.webp) * \| 以或的方式匹配字符串 ![](https://file.jishuzhan.net/article/1731247381908819969/3cbb915ff81dc532c93680dc0840c3e1.webp)

相关推荐
学c真好玩11 小时前
4.7正则表达式
正则表达式
专注VB编程开发20年1 天前
C#,VB.NET正则表达式法替换代码
正则表达式·c#·.net·vb.net
辛-夷2 天前
正则表达式(一)
前端·javascript·正则表达式
刘大猫.2 天前
前端使用正则表达式提取经纬度 度分秒值
正则表达式·经纬度·前端使用正则·提取经纬度·提取度分秒·度分秒·vue使用正则
天狼12224 天前
java 正则表达式优化
java·mysql·正则表达式
阿达C4 天前
深入解析 Python 正则表达式:全面指南与实战示例
python·mysql·正则表达式
技术小结-李爽5 天前
正则表达式(Regular Expression,简称 Regex)
正则表达式
G皮T6 天前
【Python Cookbook】字符串和文本(五):递归下降分析器
数据结构·python·正则表达式·字符串·编译原理·词法分析·语法解析
___波子 Pro Max.8 天前
正则表达式和通配符
正则表达式
北极象9 天前
用C实现一个最简单的正则表达式引擎
c语言·正则表达式·php