Shell 通配符

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] 同所有 az 之间的字符和 BE567 相匹配。

  • [!...] :与所有不在 方括号中的某个字符匹配。例如 [!a-z] 同某个非小写字母相匹配[5 ]

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

以下是一些通配符模式及其说明:

  • /etc/*conf/etc 目录中所有以 conf 结尾的文件。它将同 /etc/inetd.conf/etc/conf.linuxconf并且也会同 /etc/conf 相匹配。请注意,* 也匹配空字符串。

  • image/{cars,space[0-9]}/*.jpgimage/carsimage/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] :当前目录中不以 小写字符结尾的全部文件。



[5 ] 请注意:虽然这对大多数语言适用,但可能不适用于您个人的语言设置(locale )!这取决于字符排列顺序 。对于某些语言配置,[a-z] 同 a、A、b、B、(...)、z 匹配。而且我们也没有考虑到事实上某些语言还具有“带重音符号的字符 ”等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值