总结:
通配符,即globbing,多用于文件名上,如ls,tar,find等命令
正则表达式,则主要针对文件内容,如grep,awk,sed等命令
通配符:
当查找文件时,可以使用通配符来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,也可以使用通配符。
例如:当你查看当前目录下所有以virtual开头的目录时
用*可以代替之后的所有字符。
再如:当你想删去当前目录下所有file开头的文件时
rm -rf file*
通配符的语法:
* | 任意长度的任意字符 |
? | 任意单个字符 |
^ | 脱字符,取反,指定范围外的任意单个字符 |
[] | 指定范围内的任意单个字符 |
[0-9] | 所有的数字 |
[a-z] | 所有的小写字母 |
[A-Z] | 所有的大写字母 |
[a-zA-Z] | 所有的字母 |
[0-9a-zA-Z] | 所有的数字和字母 |
注:红色部分测试时有些问题。
在test目录下有两个文件,abc和ABC。当使用[a-z]测试时,两个文件都显示出来了,而不是只显示abc。
通配符中字符的集合:
[:digit:] | 所有数字, 相当于0-9 |
[:lower:] | 所有的小写字母 |
[:upper:] | 所有的大写字母 |
[:alpha:] | 所有的字母 |
[:alnum:] | 相当于[0-9a-zA-Z] |
[:space:] | 空白字符 |
[:punct:] | 所有标点符号 |
[:digit:]只是相当于0-9,在使用时,应使用[[:digit:]]
注:测试上面的例子,完全没有问题
正则表达式:
正则表达式(也称为“regex”或“regexp”)是一种用来描述文本模式的特殊语法。在 Linux 系统上,正则表达式通常被用来查找文本的模式,以及对文本流执行“搜索-替换”操作以及其它功能。
例如:找出/etc/passwd中以root开头的行
再如:将/etc/passwd中bash为/sbin/nologin的用户找出来
正则式的语法:
^ | 锚定行首的符合条件的内容,用法格式“^pattern” |
$ | 锚定行尾的符合条件的内容,用法格式“pattern$” |
. | 匹配任意单个字符 |
* | 匹配紧挨在其前面的字符任意次 |
[] | 匹配指定范围内的任意单个字符 |
[^] | 匹配指定范围外的任意单个字符 |
[a-z], [A-Z], [0-9] | 同通配符 |
[:lower:],[:upper:],[:digit:] | 同上 |
[:alpha:],[:alnum:],[:space:],[:punct:] | 同上 |
\? | 匹配紧挨在其前面的字符0次或1次 |
\{m,n\} | 匹配其前面的字符至少m次,至多n次 |
\< | 锚定词首,用法格式:\<pattern |
\> | 锚定词尾,用法格式:pattern\> |
\(\) | 分组,用法格式: \(pattern\) |
另附上扩展正则表达式:
可在egrep中使用,只列出与标准正则表达式不一样的部分。
+ | 匹配其前面的字符至少1次 |
? | 匹配其前面的字符0次或1次 |
{m,n} | 匹配其前面出现的字符至少m次,至多n次 |
() | 分组,支持引用\1, \2 |
a|b | 二选一 |
^ $ . * [] [^] \< \> | 与标准正则式相同 |