glob 通配符

Shell 通配符

您可能已經在不知不覺中早已使用了通配符了。當您在 Windows® 中指定文件或尋找文件時,您使用 * 表明任意字符串。例如:*.txt 同全部以 .txt 結尾的文件相匹配。咱們也在上一節經常使用到它們。不過,除了 *,還有不少其餘的通配符。

當您鍵入 ls *.txt 命令並按 Enter 後,尋找哪些文件同 *.txt 模式相匹配的任務不是由 ls 命令,而是由 shell 本身完成。這須要對命令行是如何被 shell 解析的做進一步解釋。當您鍵入:

$ ls *.txt
      readme.txt recipes.txt

該命令首先被分割成一系列單詞(本例中的 ls 和 *.txt)。當 shell 在某個單詞中發現了 *,它會將整個單詞看成通配模式解析,並用全部相匹配的文件替換它。所以,該命令在執行前就變爲 ls readme.txt recipe.txt,而這將獲得指望的結果。其他通配符有:

    ?:僅與一個任意字符匹配。

    [...]:同方括號中的任意一個字符相匹配。這些字符能夠用字符範圍(好比 1-9)或者離散值或同時使用二者表示。例如:[a-zBE5-7] 同全部 a 到 z 之間的字符和 B、E、五、六、7 相匹配。

    [!...]:與全部不在方括號中的某個字符匹配。例如 [!a-z] 同某個非小寫字母相匹配[5];

    {c1,c2}:同 c1 或者 c2 相匹配。其中 c1 和 c2 也是通配符。所以,您可使用 {[0-9]*,[acr]}。

如下是一些通配符模式及其說明:

    /etc/*conf:/etc 目錄中全部以 conf 結尾的文件。它將同 /etc/inetd.conf、/etc/conf.linuxconf,而且也會同 /etc/conf 相匹配。請注意,* 也匹配空字符串。

    image/{cars,space[0-9]}/*.jpg:image/cars、image/space0、(...)、image/space9 目錄中以 .jpg 結尾的文件。

    /usr/share/doc/*/README:全部 /usr/share/doc 的直接子目錄中的所有 README 文件。好比 /usr/share/doc/mandrake/README。可是不包括 /usr/share/doc/myprog/doc/README。

    *[!a-z]:當前目錄中不以小寫字符結尾的所有文件。linux

 

轉自:http://www.douban.com/note/145964921/shell

相關文章
相關標籤/搜索