Glob匹配模式
2017-12-31 本文已影响0人
随风Wayne
在Linux中,glob是用来匹配路径名的通配符,主要包含以下四种:
通配符(Wild Matching)
-
*匹配0个或者多个字符,比如
d\*
,可以匹配d
,dl
,ddl
-
?匹配单个字符,比如
d?
,只匹配dd
,不能匹配d
字符集(Character classes)
包含在[]中的字符,只会被匹配一个,并且[]不可以为空。比如[abc]匹配a,b,c三个中的一个字符。
需要注意[ ]里可以包含[,],!,?,*,\这些特殊字符,因此[[!*?]]匹配[,!,,*,?中的一个字符。
字符范围(Range)
两个字符中间用'-'连接表示range,比如[0-9]等同于[0123456789]。
需要注意的是,如果-出现在开头或者结尾,并不表示range,比如[-a]或者[a-]匹配-,a字符中的一个。
字符取反(Complementation)
[!abc]表示匹配a,b,c之外的一个字符。
注意事项
- 上面所有形式的glob都不匹配/(Forward slash)字符,因此假设有如下目录结构:
├── Document
│ ├── glob.txt
│ ├── Linux
│ ├── glob.txt
那么在Document目录下运行ls *.txt
只会列出Document目录下的glob.txt,而不会列出Linux/glob.txt
**双星号代表可以匹配后代所有子目录。所以上面可以使用
ls **/*.txt
,列出glob.txt和Linux/glob.txt
-
任何以.开头命名的文件,都必须在glob中显示指定才能匹配;比如有一个文件.abc,那么
rm \*
匹配不到.abc,只能使用rm .*
-
glob与正则表达式不一样;glob只匹配路径名,而不是匹配文件的内容,并且glob与正则表达式虽然有相同的通配符,但是意义却不一样,比如a*k在glob中可以匹配ak,abk,abck,但在正则表示中表示匹配ak,aak,aaak。