事实上,Linux 系统的通配符 (wildcard) 与正则表达式有很大的差别。在《鸟哥的私房菜》12 章中,鸟哥就特别强调,正则表达式 与 通配符是完全不一样的东西。因为 通配符 代表的是 bash 接口的一个功能,用与 linux shell 命令中(如文件名相关操作),而 正则表达式 则是一种字符串处理的表示方法,用于文本内容中的字符串搜索和替换等。通配符是 Linux系统本身救支持的,而正则表达式用于 vim 编辑器或 awk 程序,这些文本工具就是由于支持 正则表达式 才变得如此强大。
1、通配符
[ a - z ] 或 [12] :匹配方括号中指定范围内的单个字符或方括号列出的其中一个字符
[ !9 ] :不匹配方括号中所列字符或指定范围内的单个字符
* : 匹配 0 个字符或多个字符
?:匹配任何单个字符,且不能为空字符。
由于 shell 会将字符 ? [ ] * 区别对待,因此在命令参数时如果需要用到这几个特殊字符,应将该参数用单引号标注或通过在特殊字符前加转义字符 \。
2、正则表达式
^word : 待查找的字符串(word)在行首
word$ : 待查找的字符串(word)在行尾
. :代表一定有一个任意字符的字符
\ : 转义字符,将特殊符号的特殊意义去掉
* : 重复零个到无穷多的前一个字符
[ list ] :从字符集合的 RE 字符里面找出想要选取的字符
[ n1 -- n2 ] :从字符集合的 RE 字符里面找出想要选取的字符范围
[ ^list ] : 从字符集合的 RE 字符里面找出不要的字符串或范围
\{ n , m \} : 连续 n 到 m 个的前一个 RE 字符
以上为基础正则表达式字符,下面为扩展正则表达式字符:
+ : 重复一个或一个以上的前一个 RE 字符
? : 零个或一个的前一个 RE 字符
| : 用或(OR) 的方式找出数个字符串
() : 找出“组”字符串
()+ : 多个重复组的判别