文件通配符是啥?

文件通配符

    包含 ‘?’, ‘*’ 或 ‘[‘ 字符的字符串称为通配符模板(wildcard  pattern).形成路径名(globbing)指一种操作,把通配符模板展开为匹配该串的路径名.匹配定义为:

    不在 括弧中的‘?’匹配任意单个字符。

    不在方括弧中的‘*’匹配任意字符串,包括空串。

1、字符集 (Character classes)

    对于表达式`[…]’,如果在第一个 ‘[‘ 符后面出现的第一个字符不是 ‘!’, 则该表达式 匹配任意一个在 `[…]’ 内出现的字符.方括弧内不能有空串,因此 ‘]’ 可以作为第一个字符出现在方括弧内. (像这样, ‘[][!]’ 匹配下列三个字符中的任意一个, ‘]’, ‘[‘ 和 ‘!’.)

1.1、范围集 (Ranges)

    字符集有一个特例:用 ‘-‘ 分开的两个字符表示一个范围集.(像这样, `[A-Fa-f0-9]’ 等于 `[ABCDEFabcdef0123456789]’.)把 ‘-‘ 放到方括弧内的开头或最后可以获得它的本意.  (像 这样, `[]-]’ 匹配‘]’和‘-‘ 中任意一个.而 `[-./]’ 匹配 `-‘, `.’ 和`/’中 任意 一个.)

1.2、补集 (Complementation)和特殊含义字符的本意表达

    表达式 ‘[!…]’ 表示一个字符,该字符不匹配方括弧内去掉开头 ‘!’ 后的表达式. (像 这样, `[!]a-]’ 匹配除了 ‘]’, ‘a’ 和 ‘-‘ 的任意一个字符.)

    要去掉 ‘?’, ‘*’ 和 ‘[‘ 的特殊含义,可以通过前面加一个反斜杠;或者在shell命令行中,通过引号来引用这些字符.在方括弧内这些字符显露出本意,所以, ‘[[?*\]’ 匹配 这 四个字符 中的一个: ‘[‘,’?’, ‘*’, ‘\’.

2、路径名 (PATHNAME)

    形成路径名功能应用于路径中的每一个成员部分.路径中的 ‘/’ 不能被通配符‘?’ 或 ‘*’, 或范围集匹配

如 ‘[.-0]’ 匹配.范围集不能直接包含 ‘/’, 否则 导致 语法错误.

    如果待匹配的文件名以‘.’开头,那么这个 ‘.’ 字符必须直接给出. (比如说, ´rm *’ 不会删除 ‘.profile’ 文件, ‘tar c *’ 不会打包你的所有文件;用 ‘tar c .’ 会更好.)

3、空列表 (EMPTY LISTS)

    上述的简单优雅规则,把通配符模板展开为匹配的路径名,来源于最初的UNIX定义.它允许展开出空串。

例如xv -wait 0 *.gif *.jpg这里可能没有 *.gif 文件(而且不算错误).然而, POSIX 要求句法错误或路径名列表为空时,保留通配符模板不变.(即不展开)

4、正则表达式和通配符的区别

    正规表达式 (Regular expressions)

注意,通配符模板不是正规表达式,尽管它们有点象.首先,它匹配文件名,而不是正文;其次,规则不一样,例如正规表达式里的 ‘*’ 代表零个或多个前面内容的重复.正规表达式的方括弧表达式用 ‘^’ 引导取反操作, (而不是 ‘[!…]’). POSIX 声明, 在通配符模板中, ‘[^…]’ 未做定义.

5、字符集和国际化(Character classes and Internationalization )

当然,范围集最初指ASCII的范围,因此 ‘[ -%]’ 意思是 ‘[ !”#$%]’, ‘[a-z]’ 指所有小写字符.

一些UNIX实现把这个归纳为:范围 X-Y 指 X 的编码到 Y 的编码之间的编码字符. 可是,这要求用户知道他们本地系统的字符编码,此外,如果本地的字母表顺序和字符集顺序不对应,那就更不方便了.

因此, POSIX 对通配符模板和正规表达式的方括弧表达法作了重大扩展,上面我们知道了方括弧表达式中的三个类型,它们是取补集(i)、直接列出的单个字符(i)和范围集(ii).

POSIX 对范围集在国际化方面作了更有力的说明,并且增加了三个类型:

(ii) 范围 X-Y 由 X 和 Y 之间所有的字符组成(包括X和Y), X 和 Y 的 当前编码序列由当前场合的 LC_COLLATE 分类定义

(iv) 命名字符集,

象:

[:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]

[:digit:]  [:graph:]  [:lower:]  [:print:]

[:punct:]  [:space:]  [:upper:]  [:xdigit:]

    因此可以用 ‘[[:lower:]]’ 代替 ‘[a-z]’, 它在丹麦语里同样有效,虽然丹麦的字母表里 ‘z’ 后面还有三个字母.这些字符集由当前场合的 LC_CTYPE 分类定义.

(v) 符号对映,象 ‘[.ch.]’ 或 ‘[.a-acute.]’, 在 ‘[.’  和  ‘.]’ 之间的字符串是定义在当前场合的对映元素.注意这可以是多字符元素.

(vi) 等类表达式,象 ‘[=a=]’ ,在 ‘[=’ 和 ‘=]’ 之间的字符串是任意等类中的对映元素, 它定义在当前场合. 例如, ‘[[=a=]]’ 可以等同于 `[a徉溻]’ (警告:这里有Latin-1字符),也就是 `[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]’.

原创文章,作者:TQT,如若转载,请注明出处:http://www.178linux.com/73939

赞 (0)
TQTTQT
上一篇 2017-04-23 14:15
下一篇 2017-04-23 15:36

相关推荐

  • httpd服务归纳:浅谈I/O模型

    1. 四种理论的I/O模型      1) 调用者(服务进程):         阻塞:  进程发起I/O调用,如果调用为完成,进程被挂起休眠,不能再执行其他功能    …

    Linux干货 2015-05-27
  • LVM逻辑卷的缩减与删除,LVM逻辑卷快照,btrfs文件系统,网络管理

    逻辑卷缩减 缩减的时候要注意缩减的空间不要超过文件系统的空间,不然缩减的时候会损坏文件系统。 第一步要先取消挂载(必须) 第二部检查文件完整性(必须) e2fsck -f /dev/vg0/lv0 第三部文件系统缩减,先缩减文件系统. resize2fs /dev/vg0/lv0 10G  (缩减到剩下10G) 第四步逻辑卷组的缩减 lvreduc…

    Linux干货 2016-09-06
  • 安全和加密

    安全基础仿冒别人给某人发邮件telnet 127.0.0.1 25helo a.com 命令mail from:god@heaven.com 从某处发来的邮件rcpt to:root 给某人发邮件data 数据subject:hello 邮件名I miss you 邮件正文How old are you. 点代表结束quit redhat5普通用户提升管理员…

    Linux干货 2018-01-17
  • N24_辉 学习宣言

    我志愿加入马帮的大家庭。 在此,我坚信有志者事竟成,同时,机会总是留给有准备的人的。 既来之,则安之。我的目标是能在规定的时间内结业,正如马哥所说:完成比完美更重要! 无论如何,也要完成!fighting!!!

    Linux干货 2016-10-24
  • 制作本地yum源与编译安装http

    1、制作本地yum源(centos7) [root@centos7 ~]# yum install -y lftp   #安装lftp程序 lftp 10.1.0.1:~> cd pub/Sources/sources/xen/ &n…

    Linux干货 2016-08-25
  • RAID概述

    RAID 什么是RAID RAID(redundant arrays of independents disk,独立磁盘冗余阵列)是利用数组的方式组成磁盘组。RIAD大多是由廉价的磁盘组成容量巨大的磁盘组。,利用个别磁盘提供数据所产生的加成效果提升整个磁盘系统效能。 使用RAID目的 加快访问速度 使用一个虚拟磁盘,从而增加存储容量 减少磁盘失效带来不利的影…

    Linux干货 2016-11-22

评论列表(1条)

  • renjin
    renjin 2017-04-28 11:20

    对文件能配符进行了介绍,内容介绍的很详细,排版需要再往好的排一下!