模式匹配和正则表达式
角色类
[]
glob 的有效字符类由 POSIX 标准定义:
alnum alpha ascii 空白 cntrl 数字图表下部打印 punct 空间上部字 xdigit
在 []
里面可以使用多个字符类或范围,例如,
$ echo a[a-z[:blank:]0-9]*
将匹配任何以 a
开头的文件,后跟小写字母或空格或数字。
但是,应该记住,[]
glob 只能被完全否定,而不仅仅是它的一部分。否定字符必须是打开 [
之后的第一个字符,例如,此表达式匹配所有不以 a
开头的文件
$ echo [^a]*
以下匹配所有以数字或^
开头的文件
$ echo [[:alpha:]^a]*
它并没有因为^
被解释为一个文字^
是用字母开头的任何文件或文件夹,除了一个 a
匹配。
转义全局字符
文件或文件夹可能包含一个 glob 字符作为其名称的一部分。在这种情况下,可以使用前面的\
转义 glob,以便进行文字匹配。另一种方法是使用双 ""
或单个''
引号来寻址文件。Bash 不处理包含在 ""
或''
中的 globs。
正则表达式的差异
globs 和正则表达式之间最显着的区别是有效的正则表达式需要限定符和量词。限定词识别哪些匹配和量词告诉多久的资格赛。与*
glob 相当的 RegEx 是 .*
,其中 .
代表任何字符,*
代表前一个字符的零个或多个匹配。?
glob 的等效 RegEx 是 .{1}
。和以前一样,限定符 .
匹配任何字符,{1}
表示只匹配前面的限定符一次。这不应该与 ?
量词混淆,后者在 RegEx 中匹配零或一次。[]
glob 在 RegEx 中可以使用相同的,只要它后跟一个强制量词。
等效正则表达式
Glob | 正则表达式 |
---|---|
* |
.* |
? |
. |
[] |
[] |