Zsh 開發(fā)指南(第四篇 字符串處理之通配符)

導(dǎo)讀

這是字符串處理系列的第三篇文章。前兩篇基本覆蓋了字符串處理中的常用操作,但在字符串匹配方面,沒有詳細(xì)展開。

通配符(glob)是 shell 中的一個(gè)比較重要的概念,可以認(rèn)為是正則表達(dá)式的簡化版本。通配符在字符串匹配和文件名搜索等方面非常有用。本篇只講它在字符串匹配上的用法。

通配符的基本用法

之前在講字符串匹配判斷時(shí),通配符出現(xiàn)過,就是 *$str"* 兩邊的星號。

% str1=abcd
% str2=bc

# 星號要在引號外邊
% [[ "$str1" == *"$str2"* ]] && echo good
good

# 注意帶通配符的字符串必須放在右邊
% [[ *"$str2"* == "$str1" ]] && echo good

星號是最常用的通配符,用于匹配任意數(shù)量(包括 0 個(gè))的任意字符。

# 問號用于匹配一個(gè)任意字符
% [[ abcd == ab?? ]] && echo good
good

# 中括號用于匹配出現(xiàn)在其中的單個(gè)字符
% [[ abcd == abc[bcd] ]] && echo good
good

# 如果中括號里第一個(gè)字符是 ^,則匹配除了除了中括號里的單個(gè)字符
% [[ abcd == abc[^de] ]] && echo good
% [[ abcd == abc[^ce] ]] && echo good
good

# 中括號里可以指定字符的范圍
% [[ a4 == [a-b][2-5] ]] && echo good
good

# 可以指定多個(gè)字符范圍,并且可以摻雜其他字符
% [[ B4 == [a-cdddA-B][2-5] ]] && echo good
good

# 尖括號用于匹配一定范圍的單個(gè)整數(shù)
% [[ 123 == 12<3-4> ]] && echo good
good

# 可以匹配整個(gè)整數(shù)
% [[ 123 == <100-200> ]] && echo good
good

# 可以沒有上下界,默認(rèn)的下界是 0,上界是正無窮
% [[ 123 == <100-> && 123 == <-200> ]] && echo good
good

# 可以上下界都沒有,那么會匹配任意正整數(shù)和 0
# 這個(gè)可以用來判斷字符串是否構(gòu)成整數(shù)
# [[ 123 == <-> ]] && echo good
good

# ( 1 | 2 | ... ) 用于同時(shí)判斷多個(gè)條件,滿足一個(gè)即可
%  [[ ab == (aa|ab) ]] && echo good
good

# 如果中括號里要用 - 或者 ^,放在最后即可,不需要轉(zhuǎn)義
% [[ -^3 == [a-c-][3^-][3^-] ]] && echo good
good

以上是通配符的基本用法,總結(jié)一下。

通配符 含義
* 任意數(shù)量的任意字符
? 任意一個(gè)字符
[abcd] abcd 中的任意一個(gè)字符
[^abcd] 除 abcd 外的任意一個(gè)字符
[a-c] a 和 c 之間的一個(gè)字符
[a-cB-Dxyz] a 和 c、B 和 D 之間以及 xyz 中的一個(gè)字符
<1-100> 1 和 100 之間的整數(shù)
<-50> 0 和 50 之間的整數(shù)
<100-> 大于 100 的整數(shù)
<-> 任意正整數(shù)和 0
([a-c]|<1-100>) a 和 c 之間的一個(gè)字符或者 1 和 100 之間的整數(shù)

加強(qiáng)版通配符

Zsh 還支持加強(qiáng)版通配符,功能更多一些。如果使用加強(qiáng)版的通配符,需要先在代碼里加上 setopt EXTENDED_GLOB

通配符 含義 匹配的樣例
^abc 除了 abc 外的任意字符串 aaa
abc^abc 以 abc 開頭,但后邊不是 abc 的字符串 abcabd
a*c~abc 符合 a*c 但不是 abc 的字符串 adc
a# 任意數(shù)量(包括 0)個(gè) a aaa
b## 一個(gè)或者多個(gè) b b
(ab)## 一個(gè)或者多個(gè) ab abab
(#i)abc 忽略大小寫的 abc AbC
(#i)ab(#I)c 忽略大小寫的 ab 接著 c ABc
(#l)aBc a 和 c 忽略大小寫,但 B 必須大寫 的 aBc aBC
(#a1)abc 最多錯(cuò)(多或缺也算)一個(gè)字符的 abc a2c 或 ab 或 abcd

此外還有一些更高級的用法,暫時(shí)先略過。

總結(jié)

字符串的內(nèi)容先告一段落,但之后的文章依然會不斷地涉及字符串,因?yàn)閿?shù)組和哈希表里的內(nèi)容通常是字符串,處理目錄文件時(shí)也涉及大量的字符串操作等等,屆時(shí)會有新的字符串處理方法。此外,如果我發(fā)現(xiàn)新的處理字符串的方法或者技巧,也會更新這幾篇文章。

參考

http://www.bash2zsh.com/zsh_refcard/refcard.pdf

本文不再更新,全系列文章在此更新維護(hù):github.com/goreliu/zshguide

付費(fèi)解決 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等領(lǐng)域相關(guān)問題,靈活定價(jià),歡迎咨詢,微信 ly50247。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容