這是字符串處理系列的第三篇文章。前兩篇基本覆蓋了字符串處理中的經常使用操做,但在字符串匹配方面,沒有詳細展開。git
通配符(glob)是 shell 中的一個比較重要的概念,能夠認爲是正則表達式的簡化版本。通配符在字符串匹配和文件名搜索等方面很是有用。本篇只講它在字符串匹配上的用法。github
以前在講字符串匹配判斷時,通配符出現過,就是 *$str"*
兩邊的星號。正則表達式
% str1=abcd
% str2=bc
# 星號要在引號外邊
% [[ "$str1" == *"$str2"* ]] && echo good
good
# 注意帶通配符的字符串必須放在右邊
% [[ *"$str2"* == "$str1" ]] && echo good複製代碼
星號是最經常使用的通配符,用於匹配任意數量(包括 0 個)的任意字符。shell
# 問號用於匹配一個任意字符
% [[ abcd == ab?? ]] && echo good
good
# 中括號用於匹配出如今其中的單個字符
% [[ abcd == abc[bcd] ]] && echo good
good
# 若是中括號裏第一個字符是 ^,則匹配除了除了中括號裏的單個字符
% [[ abcd == abc[^de] ]] && echo good
% [[ abcd == abc[^ce] ]] && echo good
good
# 中括號裏能夠指定字符的範圍
% [[ a4 == [a-b][2-5] ]] && echo good
good
# 能夠指定多個字符範圍,而且能夠摻雜其餘字符
% [[ B4 == [a-cdddA-B][2-5] ]] && echo good
good
# 尖括號用於匹配必定範圍的單個整數
% [[ 123 == 12<3-4> ]] && echo good
good
# 能夠匹配整個整數
% [[ 123 == <100-200> ]] && echo good
good
# 能夠沒有上下界,默認的下界是 0,上界是正無窮
% [[ 123 == <100-> && 123 == <-200> ]] && echo good
good
# 能夠上下界都沒有,那麼會匹配任意正整數和 0
# 這個能夠用來判斷字符串是否構成整數
# [[ 123 == <-> ]] && echo good
good
# ( 1 | 2 | ... ) 用於同時判斷多個條件,知足一個便可
% [[ ab == (aa|ab) ]] && echo good
good
# 若是中括號裏要用 - 或者 ^,放在最後便可,不須要轉義
% [[ -^3 == [a-c-][3^-][3^-] ]] && echo good
good複製代碼
以上是通配符的基本用法,總結一下。數組
通配符 | 含義 | |
---|---|---|
* | 任意數量的任意字符 | |
? | 任意一個字符 | |
[abcd] | abcd 中的任意一個字符 | |
[^abcd] | 除 abcd 外的任意一個字符 | |
[a-c] | a 和 c 之間的一個字符 | |
[a-cB-Dxyz] | a 和 c、B 和 D 之間以及 xyz 中的一個字符 | |
<1-100> | 1 和 100 之間的整數 | |
<-50> | 0 和 50 之間的整數 | |
<100-> | 大於 100 的整數 | |
<-> | 任意正整數和 0 | |
([a-c]I<1-100>) | a 和 c 之間的一個字符或者 1 和 100 之間的整數 |
Zsh 還支持增強版通配符,功能更多一些。若是使用增強版的通配符,須要先在代碼里加上 setopt EXTENDED_GLOB
。bash
通配符 | 含義 | 匹配的樣例 |
---|---|---|
^abc | 除了 abc 外的任意字符串 | aaa |
abc^abc | 以 abc 開頭,但後邊不是 abc 的字符串 | abcabd |
a*c~abc | 符合 a*c 但不是 abc 的字符串 | adc |
a# | 任意數量(包括 0)個 a | aaa |
b## | 一個或者多個 b | b |
(ab)## | 一個或者多個 ab | abab |
(#i)abc | 忽略大小寫的 abc | AbC |
(#i)ab(#I)c | 忽略大小寫的 ab 接着 c | ABc |
(#l)aBc | a 和 c 忽略大小寫,但 B 必須大寫 的 aBc | aBC |
(#a1)abc | 最多錯(多或缺也算)一個字符的 abc | a2c 或 ab 或 abcd |
此外還有一些更高級的用法,暫時先略過。微信
字符串的內容先告一段落,但以後的文章依然會不斷地涉及字符串,由於數組和哈希表裏的內容一般是字符串,處理目錄文件時也涉及大量的字符串操做等等,屆時會有新的字符串處理方法。此外,若是我發現新的處理字符串的方法或者技巧,也會更新這幾篇文章。ide
www.bash2zsh.com/zsh_refcard…ui
全系列文章地址:github.com/goreliu/zsh…spa
付費解決 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等領域相關問題,靈活訂價,歡迎諮詢,微信 ly50247。