1. 正则表达式相关介绍
(1)从文件或者命令中抽取或者过滤特定模式的的文本时常用正则表达式。
(2)正则表达式(RE)是一些字符串(字符串中包含特殊含义字符或者普通字符)模式的集合。
(3)正则表达式在grep、awk、sed命令中使用比较广泛。
(4)写正则表达式时先想好预期的输出结果。
2. 基本元字符及含义
元字符 | 含义 |
^ | 匹配行首 |
$ | 匹配行尾 |
* | 单个字符之后,匹配0个或多个该字符 |
[] | 表示字符序列范围 |
\ | 屏蔽元字符的含义,使其失去特殊意义 |
. | 匹配任意单个字符 |
.* | 匹配任意字符 |
pattern\{n\} | 匹配前面模式出现次数,前面模式出现n次 |
pattern\{n,\} | 匹配前面模式出现次数,前面模式至少出现n次 |
pattern\{n,m\} | 匹配前面模式出现次数,前面模式出现n到m次 |
3. 基本元字符使用
(1)^匹配行首字符串或字符序列
例子1: ^001 匹配001开头的字符串。
例子2:目录执行ls -l 返回 结果中使用^d筛选出目录。
例子3: ^..12 匹配以任意两个字符开头,然后是12的字符。
(2)$匹配行首字符串或字符序列
例子1:1c$ 以1c结尾的字符串
例子2:^$ 匹配空行
例子3:^.$ 匹配单个字符的行
(3) *匹配字符串中前面单个字符或者重复序列(0次或者多次)
例子1:compu*t 可以出现的结果:compy、comput、compuut等
(4)[]匹配一个范围或者集合
例子1:[1-9]或者[1,2,3,4,5,6,7,8,9] 匹配1到9任意1个数字
例子2:[a-z] 匹配任意1个小写字母
例子3:[A-Z] 匹配任意1个大写字母
例子4:[a-z A-Z] 匹配任意字母
例子5:[a-z A-Z 0-9] 匹配任意字母或者数字
例子6:[a-z A-Z]* 匹配任意单词
例子7:[^0-9] 匹配任意非数字字符,^在括号内表示不匹配
例子8:[Ss]ys 匹配Sys或者sys
(5)\屏蔽特殊符号的含义
特殊符号包括:$ . ' " * [ ] ^ | ( ) \ + ?
例子1:\.doc$ 匹配".doc"结尾的文件
例子2:\$ 匹配包含“$”的行
(6). 匹配单个字符
例子1: x..d 匹配 x开头d结尾,中间为任意2个字符的字符串(字符可以为数字或者字母)
(7) .* 匹配任意字符(任意字符任意个数)
例子1: x.*d 匹配x开头d结尾的任意字符串。
(8)pattern\{n\}匹配n次模式;pattern\{n,\}匹配至少n次模式;pattern\{n,m\}匹配n到m次模式
例子1: B\{3\}A 匹配BBBA
例子2: B\{3,\}A 匹配BBBA、BBBBA等
例子3:B\{3,5\}A 匹配BBBA、BBBBA、BBBBBA
例子4:[a-z A-Z]\{3\}XX[0-9]\{2\} 匹配前面3个字符是字母中间是XX后面两个字符是数字
4. 正则表达式实际应用
(1)匹配任意行 [^.*$]
(2) 匹配IP地址 [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
(3)匹配日期 yyyy-mm-dd [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
(4)匹配至少1个小写字母 [a-z][a-z]*
(5) 非d开头的字符串序列 ^[^d]