glob模式文件
- 2019 年 10 月 5 日
- 筆記
原文鏈接:https://blog.csdn.net/metheir/article/details/81808183
在計算機編程中,特別是類Unix環境,glob模式通過通配符來匹配文件名。例如:Unix命令,將所有以擴展名為.txt的文件從當前目錄拷貝到textfiles目錄。
1 |
mv *.txt textfiles/ |
---|
這裡【*】是一個匹配任意數量字符基本通配符,*.txt就表示一個glob模式。另一個通用的通配符是【?】,它表示任意一個字符。
最常用的通配符是 *,?,[…]:
通配符 |
描述 |
例子 |
匹配 |
不匹配 |
---|---|---|---|---|
* |
匹配任意數量的字符包括空字符 |
Law* |
Law, Laws, or Lawyer |
|
*Law* |
Law, GrokLaw, or Lawyer. |
|
||
? |
匹配任意一個字符 |
?at |
Cat, cat, Bat or bat |
at |
[abc] |
匹配任意一個包含的字符 |
[CB]at |
Cat or Bat |
cat or bat |
[a-z] |
匹配任意一個給定範圍的字符 |
Letter[0-9] |
Letter0, Letter1 etc. |
Letters or Letter |
注意,在所有以上例子中路徑分隔符(unix的/,windows的)都不會被匹配。
在Linux和POSIX系統中[…]有以下兩個擴展:
通配符 |
描述 |
例子 |
匹配 |
不匹配 |
---|---|---|---|---|
[!abc] |
不匹配任意一個包含的字符 |
[!C]at |
Bat, bat, or cat |
Cat |
[!a-z] |
不匹配任意一個給定範圍的字符 |
Letter[!3-5] |
Letter1, Letter2 etc. |
Letter3, Letter4 or Letter5 |
與正則的比較:
Glob的通配符 |
等價正則的表達式 |
---|---|
? |
. |
* |
.* |
Glob嘗試匹配整個字符串(例如,S*.DOC將匹配S.DOC和SA.DOC,但不匹配POST.DOC或SURREY.DOCKS),正則只匹配子串除非使用^和$。所以S*.DOC的等價正則是^S.*.DOC$。
node glob對常用通配符又做了一些擴展:
通配符 |
描述 |
例子 |
匹配 |
不匹配 |
---|---|---|---|---|
** |
匹配任意數量的字符包括空字符(包括路徑分隔符) |
**/*.js |
/a/b/c.js |
|
!(pattern|pattern) |
匹配除了()內以外的pattern |
!(abc|bcd) |
aaa,bbb |
abc.bcd |
?(pattern|pattern) |
匹配至多一個()內的pattern |
?(abc|bcd) |
abc |
bbb |
+(pattern|pattern) |
匹配至少一個()內的pattern |
+(abc|bcd) |
abc |
bbb |
*(pattern|pattern) |
匹配任意個()內的pattern |
*(abc|bcd) |
abc |
bbb |
@(pattern|pattern) |
精確匹配()內的其中一個pattern |
@(abc|bcd) |
abc |
abd |