1. 一般通配符

通配符是一种用来模糊匹配的特殊语句。主要用来进行文件名匹配、路径名搜索、字符串查找等。常见的通配符有如下四种。

*(星号)

匹配任意字符的任意组合的0次或多次出现。例如,f*可以匹配ffafab等,即匹配以f打头的任意字符串。

注意,文件名前面的圆点.和路径名中的斜线/必须显式匹配。例如,模式*file不能匹配.profile。模式/etc*.c不能匹配在/etc目录下带有后缀.c的文件,而模式/etc/*.c才能匹配这些文件。

?(问号)

匹配任意一个字符。例如,f?可以匹配f1fafb等,但不能匹配ffabcf12等。

[字符组]

匹配该字符组内所限定的任何一个字符。例如,f[abcd]可以匹配fafbfc等,但不能匹配ffabcf12等。

用这种通配符,方括号内的字符组可以用连字符-方便地给出,例如f[a-d] 表示f[abcd]f[1-9]表示f[123456789]

!(感叹号)

如果它紧跟在一对方括号的左方括号[之后,表示不匹配在这个方括号内的字符。例如,f[!0-9].c表示以f开头,后面一个字符不是数字的,后缀是.c的文件。

2. 模式表达式

上面几种普通的通配符基本上都是匹配一些单个的字符,或者一组任意的字符。bash 除了支持上面几种普通的通配符外,还提供特有的扩展模式匹配表达式,下面介绍其含义。

*(模式表)

匹配给定模式表中0次或多次出现的模式,各模式间以|分开。例如,file*(.c | .o)将匹配文件filefile.cfile.c.c.cfile.c.o.c等。

+(模式表)

匹配给定模式表中一次或多次出现的模式,各模式之间以|分开。 例如,file+(.c | .o)将匹配文件file.cfile.c.c.cfile.c.o.c等 ,但不匹配file

?(模式表)

匹配模式表中任意一种0次或1次出现的模式,各模式之间以|分开,例如,file?(.c | .o)将匹配filefile.cfile.o等。

@(模式表)

仅匹配模式表中模式只一次出现的模式,各模式之间以|分开。例如,file@(.c | .o)匹配file.cfile.o,但不匹配filefile.c.o等。

!(模式表)

除给定模式表中的模式外,它可以匹配任意东西。

最后修改:2019 年 09 月 08 日
如果觉得我的文章对你有用,请随意赞赏