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: 标点符号

表示过滤单个字符

^ 表示匹配字符串开始的位置,匹配行首

$ 表示匹配字符串末尾的位置,匹配行尾

* 匹配前面子表达式0次或者多次。

  • \{n\} 匹配前面的子表达式n次
  • .* 表示任意长度的任一字符,不包括0次

4. 拓展正则表达式

支持的工具: (egrep、awk、grep -E、sed -r)

字符 作用
+ 表示匹配前面的子表达式1次以上
? 表示匹配前面的子表达式0或者1次
( ) 将括号里的内容看成一个整体
| 以或的方式匹配字符串
  • 表示匹配前面的子表达式1次以上

? 表示匹配前面的子表达式0或者1次

  • ( ) 将括号里的内容看成一个整体
  • | 以或的方式匹配字符串
相关推荐
踏着七彩祥云的小丑16 天前
Go学习第9天:并发编程 + 文件操作 + 正则表达式
学习·golang·正则表达式·go
bosins16 天前
密码复杂度验证正则表达式
正则表达式
小森林之主17 天前
正则表达式零宽断言实战:凌晨3点的服务器报警
python·正则表达式·零宽断言·服务器报警·正则速查
小森林之主17 天前
Python re 模块速查:从实战对比中掌握正则表达式
python·正则表达式·性能测试·re模块·编程实战
程序猿零零漆18 天前
Python进阶之路:正则表达式、高级语法与核心数据结构(链表、二叉树)全解析
数据结构·python·正则表达式
2301_7818335219 天前
Python 正则表达式入门教程
开发语言·python·正则表达式
五阿哥永琪19 天前
正则表达式
数据库·mysql·正则表达式
小森林之主20 天前
深入正则表达式:核心语法与实战剖析
javascript·python·正则表达式·编程技巧·字符串处理
小森林之主20 天前
JavaScript 正则表达式:从零开始的实战对比
javascript·正则表达式·前端开发·性能对比·文本处理
不吃土豆的马铃薯20 天前
C++ 正则表达式入门详解
linux·服务器·网络·数据库·c++·正则表达式