Linux shell 通配符 / glob 模式


概念

glob 模式(globbing)也被稱之為 shell 通配符,名字的起源來自於 Unix V6 中的 /etc/glob (詳見 man 文檔)。glob 是一種特殊的模式匹配,最常見的是通配符拓展,也可以將 glob 模式設為精簡了的正則表達式,在最新的 CentOS 7 中已經刪除了 glob 的相關描述文檔,刪除的原因由於 glob 已經整合到了 shell 之中,然后就有了 shell 通配符。

筆者在查閱資料的時候發現關於 glob 模式或者 globbing 的相關描述以及文檔是少之又少,所以特地在這里整理一下並重新寫一寫使用方法

shell 通配符 / glob 模式通常用來匹配目錄以及文件,而不是文本!!!
shell 通配符 / glob 模式通常用來匹配目錄以及文件,而不是文本!!!
shell 通配符 / glob 模式通常用來匹配目錄以及文件,而不是文本!!!

語法

字符 解釋
* 匹配任意長度任意字符
? 匹配任意單個字符
[list] 匹配指定范圍內(list)任意單個字符,也可以是單個字符組成的集合
[^list] 匹配指定范圍外的任意單個字符或字符集合
[!list] 同[^list]
{str1,str2,...} 匹配 srt1 或者 srt2 或者更多字符串,也可以是集合

專用字符集

字符 意義
[:alnum:] 任意數字或者字母
[:alpha:] 任意字母
[:space:] 空格
[:lower:] 小寫字母
[:digit:] 任意數字
[:upper:] 任意大寫字母
[:cntrl:] 控制符
[:graph:] 圖形
[:print:] 可打印字符
[:punct:] 標點符號
[:xdigit:] 十六進制數
[:blank:] 空白字符(未驗證)


在使用通配符的過程中可能會遇到文件名中包含了特殊字符的情況,例如

bash$:ls
a\b        a[123]b        A[abc]123        abc!123
a 12 b                #這是一個文件

在不使用專用字符集的情況下,需要使用轉義符來匹配,或者使用單引號將其框選。

這里將 Linux shell 元字符列出,在使用通配符時如果沒有進行轉義可能就會被辨識為元字符

字符 作用
IFS 由 < space > 或 < tab > 或 < enter > 三者之一組成
CR 由 < enter > 產生
= 設定變量
$ 作變量或運算替換
> 重導向標准輸出
< 重導向標准輸入
| 命令管線
& 重導向文件描述符,或將命令靜默執行
( ) 將其內的命令置於 nested subshell 執行,或用於運算或命令替換
{ } 將其內的命令置於 non-named function 中執行,或用在變量替換的界定范圍
; 在前一個命令結束時,而忽略其返回值,繼續執行下一個命令
&& 在前一個命令結束時,若返回值為 true,繼續執行下一個命令
|| 在前一個命令結束時,若返回值為 false,繼續執行下一個命令
! 執行 history 中的命令

第六行與倒數第二行居然錯誤了,看來博客園對 Markdown 的支持有待改進

第六行內容:“ | ”命令管線
倒數第二行內容:“ || ” 在前一個命令結束時,若返回值為 false,繼續執行下一個命令

示例

這里使用 /etc 下的文件為例

匹配以 a開頭,中間包含任意數量數字的文件

ls a*[0-9]*
#當然你是找不到的,因為通常情況下 /etc 下沒有這樣的文件

匹配以任意小寫字母開頭,中間包含數字的文件

ls [[:lower:]]*[0-9]*
#相信你已經看到了一些文件,我們繼續

列出所有文件中以 init 開頭,英文結尾的文件

ls init*[a-z]

列出以 au,b,c 開頭的文件

ls {"au",[bc]}* 

更多的實例可以通過搜索引擎找到,這里就不多說了

注意事項

  • 在使用專屬字符集的時候,字符集之外還需要用 [ ] 來包含住,否則專用字符集不會生效,例如 [[:space:]]
  • 想要轉義的時候,單引號與雙引號使用方法是不同的,單引號會轉義所有字符,而且單引號中間不允許再出現單引號,雙引號允許出現特定的 shell 元字符,具體字符可以自行查詢
  • 在使用花括號 {} 的時候,里面的單個字符串需要使用單引號或者雙引號括住,否則就會視為多個的單個字符


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM