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

相关文章
相关标签/搜索