模式匹配和正規表示式
角色類
[]
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 |
正規表示式 |
---|---|
* |
.* |
? |
. |
[] |
[] |