shell正则表达式
正则表达式分为两类,基本正则表达式以及扩展正则表达式,其主要作用是文本搜索以及字符串处理。
基本正则表达式原字符及其含义
| 符号 | 含义 |
| * | 匹配0个或多个*前面的普通字符 |
| . | 匹配任意字符 |
| ^ | 匹配行首 |
| $ | 匹配行尾 |
| [] | 匹配字符集合 |
| \ | 转义字符,屏蔽元字符的特殊意义 |
| \{n\} | 匹配前面字符出现n次 |
| \{n,\} | 匹配前面字符至少出现n次 |
| \{n,m\} | 匹配前面字符出现n~m次 |
举例如下:
1.”*” : 表示匹配前面字符出现0次或者多次
例如:abc*d,此时可以匹配abcd、abccd、abcccd、abcccccd等
2. “.” :可以匹配任意字符
例如: abc. 可以匹配abcd、abce、abc1、abc5等,也可以匹配空格
3. “^” :表示匹配行首
例如:^abc,表示匹配以abc为开头的所有行
4. “$” :表示匹配行尾,与$用法刚好相反
例如:abc$,表示匹配以abc结尾的所有行,^$表示匹配空行,^.$匹配包含一个字符的行
5. “[]” :匹配字符集合,支持通过穷举方法列出所有元素
例如:[0123456789],表示匹配1到9任意一个数字,也可以写成[0-9],[A-Z]表示匹配所有大写字母,[a-z],表示匹配所有小写字母,[^a-d],表示匹配除了a-d之外的所有字符,取反的意思,[A-Za-z],表示匹配所有英文字母
6. “\” :表示转义字符,可以屏蔽一个元字符的含义
例如:abcd\. 此时.将不会匹配任意字符,已被转义,输出结果将是abcd.
7. “\{\}”:用法与*类似,但是可以指定匹配的次数
例如:abc\{3\},表示匹配字母c出现的次数为3次,将匹配abccc。abc\{3,\}表示可以匹配字母c出现的次数至少3次,可以匹配abccc、abcccc、abcccc。 abc\{3,5\}表示将匹配c出现的次数为最少3次,最多5次
扩展正则表达式元字符及其含义
| 符号 | 含义 |
| ? | 匹配0个或1个前面的字符 |
| + | 匹配1个或多个前面的字符 |
| () | 包含正则表达式与”|”一起使用 |
| | | 正则表达式”或”操作符 |
举例如下:
1. “?” :匹配?前面的字符0次或者1次
例如:abc?,表示匹配字母c出现0个或1个,只能匹配一个字符,可以匹配ab、abc
2. “+” : 匹配前面的字符1次或者多次,至少1次
例如:ab+c,可以匹配abc、abbc、abbbc、abbbbbc
3. “()和|” :两个符号通常一起使用,表示一组可选字符的集合
例如:abc(d|e|f)g,可以匹配abceg、abcdg、abcfg等
特殊字符组
| [[:alpha:]] | 匹配任意字母字符,不管是大写还是小写 |
| [[:alnum:]] | 匹配任意字母数字字符0~9、A~Z或a~z |
| [[:blank:]] | 匹配空格或制表符 |
| [[:digit:]] | 匹配0~9之间的数字 |
| [[:lower:]] | 匹配小写字母字符a~z |
| [[:print:]] | 匹配任意可打印字符 |
| [[:punct:]] | 匹配标点符号 |
| [[:space:]] | 匹配任意空白字符:空格、制表符、NL、FF、VT和CR |
| [[:upper:]] | 匹配任意大写字母字符A~Z |


