目录
一、理论
1.通配符
2.正则表达式
二、实验
1.通配符
2.正则表达式
一、理论
1.通配符
(1)概念
通配符只用于匹配文件名、目录名等,不能用于匹配文件内容,而且是已存在的文件或者目录。
各个版本的shell都有通配符,这些通配符是一些特殊的字符,
用户可以在命令行的参数中使用这些字符,进行文件名或者路径名的匹配。
shell将把与命令行中指定的匹配规则符合的所有文件名或者路径名作为命令的参数,
然后执行这个命令。
(2)通配符
表1 常用通配符
| 通配符 | 功能 |
| * | 通配符匹配任意一个或多个字符 |
| ? | 通配符匹配一个任意字符 |
| [] | [list]匹配list中任意单个字符 |
2.正则表达式
(1)概念
正则表达式英文为REGEXP(Regular Expressions),它是由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,
类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。
注意事项:使用正则表达式必须加引号。
(2)元字符
表2 常用元字符
| 元字符 | 功能 |
| . | 匹配任意单个字符,可以是一个汉字 |
| () | 使用转义符,只表示\(\) |
| [] | 匹配指定范围内的任意单个字符,示例:[dn] [0-9] [] [a-zA-Z] [:alpha:] |
| [^] | 匹配指定范围外的任意单个字符,示例:[^dn] [^a.z] |
| [:alnum:] | 字母和数字 [0-9] [a-z] [0-9] [a-z] |
| [:alpha:] | 代表任何英文大小写字符,亦即 [A-Z], [a-z] |
| [:lower:] | 小写字母,示例:[[:lower:]],相当于[a-z] |
| [:upper:] | 大写字母 [A-Z] |
| [[:blank:]] | 空白字符(空格和制表符) |
| [:space:] | 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广 |
| [:cntrl:] | 不可打印的控制字符(退格、删除、警铃...) |
| [:digit:] | 十进制数字 |
| [:xdigit:] | 十六进制数字 |
| [:graph:] | 可打印的非空白字符 |
| [:print:] | [:print:] 可打印字符 |
| [:punct:] | 标点符号 |
| \w | 匹配单词构成部分,等价于[_[:alnum:]] |
| \W | 匹配非单词构成部分,等价于[^_[:alnum:]] |
| \S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
(2)表示次数
表3 表示次数
| 次数字符 | 功能 |
| * | 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配 |
| .* | 任意长度的任意字符,不包括0次,也就是匹配所有 |
| \? | 匹配其前面的字符出现0次或1次,即:可有可无 |
| \+ | 匹配其前面的字符出现最少1次,即:肯定有且 >=1 次 |
| \{n\} | 匹配前面的字符=n次 |
| \{m,n\} | 匹配前面的字符至少m次,至多n次 |
| \{,n\} | 匹配前面的字符至多n次,<=n |
| \{n,\} | 匹配前面的字符至少n次 |
(3)位置锚定
表4 位置锚定
| 位置字符 | 功能 |
| ^ | 表示以什么字符开头的行。 |
| $ | 表示以什么字符为结尾的行。 |
| ^PATTERN$ | 表示用于模式匹配整行 (单独一行 只有PATTERN字符)。 |
| ^$ | 表示空行。 |
| \< 或 \b | 词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)。 |
| \> 或 \b | 词尾锚定,用于单词模式的右侧。 |
| \<PATTERN\> | \<PATTERN\> |
(4)分组
()将多个字符捆绑在一起当做一个整体处理
(5)扩展正则表达式
① 使用方法
grep -E选项加正则表达式内容,与正常正则表达式区别在于不用在匹配时添加 \
② 表示次数
表5 扩展正则表达式表示次数
| 表示次数 | 功能 |
| * | 匹配前面字符任意次 |
| ? | 0或1次 |
| + | 1次或多次 |
| {n} | 匹配n次 |
| {m,n} | 至少m,至多n次 |
| {,n} | 匹配前面的字符至多n次,<=n,n可以为0 |
| {n,} | 匹配前面的字符至少n次,<=n,n可以为0 |
③ 表示分组
() 分组
二、实验
1.通配符
(1)匹配任意一个或多个字符 *

(2)匹配一个任意字符 ?

(3)匹配列表中任意单个字符 []

2.正则表达式
(1)在正则表达式中表示任意单个字符 .



(2)在正则表达式中表示匹配[ ]中任意一个字符 [ ]

(3)在正则表达式中表示匹配[ ]中外的任意单个字符 [^]

(4) 元字符:
代表任何英文大小写字符 [:alpha:]
字母和数字 [:alnum:]
小写字母 [:lower:]
大写字母 [:upper:]

(5)表示匹配前面字符任意次,包括0次 *

表示匹配前面字符任意次,不包括0次 .*

(6)表示匹配前面的字符1次或0次,即可有可无 \?

(7)表示匹配前面的字符最少1次 \+

(8)表示匹配前面的字符n次 \{n\}

(9)表示匹配前面的字符最少m次最多n次 \{m,n\}

(10) 表示匹配前面的字符最少m次 \{m,\}

(11) 表示匹配前面的字符最多n次 \{,n\}




















