2019年4月18日 星期四

檔名匹配 Filename Globbing

使用命令列要列出檔案時,可以使用一些特殊的萬用字元(wildcard character)來代表檔名裡面的某些字元,這些萬用字元包含了:
  • *:匹配任何字串(和空字串與空白字元)
  • ?:匹配1個字元
  • [abc]:abc裡面任何一個字元,要注意大小寫有區分
    [123]:123裡面任何一個字元
  • [a-z]:匹配a到z這26字元的任何一個,要注意大小寫有區分
    [0-9]:匹配0到9這10個字元的任何一個
上述匹配模式又稱作wildcard pattern,不要跟正規表達式(regular expression)搞混

要注意路徑分隔字元/,並不會被匹配進去,但是中括號[]會被匹配。下面則是介紹反面列表符號!(又稱為complementation):
  • [!abc]:不匹配abc裡面的任何1個字元
  • [!]a-]:不匹配 ] 或 a 或 -

下面是一些好玩的匹配模式,注意每次只能夠匹配單一字元:
  • [A-Fa-f3-9]:等同於[ABCDEFabcdef3456789]
  • [[:alnum:]]:數字或是字母
  • [[:alpha:]]:字母
  • [[:blank:]]:一個空白字元
  • [[:cntrl:]]
  • [[:digit:]]:等同於[0-9]
  • [[:graph:]]
  • [[:lower:]]:等同於[a-z]
  • [[:print:]]
  • [[:punct:]]
  • [[:space:]]
  • [[:upper:]]:等同於[A-Z]
  • [[:xdigit:]]
  • [[=a=]]:等同於[aáàäâ]

參考資料

  • man 7 glob:在Linux裡面看globbing pathnames
  • man 1 glob:在Mac裡面看
  • man bash:參考Pathname Expansion
  • glob(7) - Linux man page
  • glob (programming):英文維基百科上面對glob的解釋
  • Gulp 學習筆記 - Glob 篇:Glob 類似於 regular expression,但是僅用來匹配檔案路徑名稱。名稱由來是 UNIX 一個負責解析匹配檔案、叫做 global command 的模組。
_EOF_

沒有留言:

張貼留言