文件通配符是啥?

文件通配符

    包含 ‘?’, ‘*’ 或 ‘[‘ 字符的字符串称为通配符模板(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

相关推荐

  • linux下手工创建新用户

    当我们要创建一个用户时,通常使用useradd命令就可以自动创建了一个用户;实际上,在linux下,一切皆文件,设置好几个文件,也是可以创建出一个用户: 文件如下: /etc/passwd  :用户 /etc/shadow  :密码 /home/username:用户家目录 /etc/group:用户组 /etc/skel/*: &nbs…

    Linux干货 2015-03-30
  • Memcached + MSM 实现Tomcat Session保持

    Memcached + MSM 实现Tomcat Session保持 tomcat memcached 前言 Memcached介绍 MSM介绍 实验拓扑 实验环境 实验步骤 安装配置Tomcat 安装配置Nginx负载均衡 安装配置Memcached + MSM 总结 前言 上篇文章我们实现了session sticky和session clus…

    2016-04-22
  • 如何理解云计算中IaaS、PaaS和SaaS?很简单,就像吃货想吃披萨了…

                                                      &nbsp…

    2015-04-17
  • Mysql cmake 编译安装、

    基于cmake的mysql安装 1.1 前言 从mysql5.5起,mysql源码安装的编译工具configure开始向cmake过渡。安装方式和之前的略有不同。在这里简单介绍总结下。 安装之前,检查下GNU make, GCC, Perl, libncurses5-dev,cmake-2.8.4是否都已经安装,如果没有安装,用yum install 安装补…

    Linux干货 2017-08-29
  • 入门——计算机基础简介

    一、计算机系统 计算机系统:由硬件(Hardware)系统和软件(Software)系统俩大部分组成 二、计算机硬件 计算机(computer):是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动、高速的处理,然后把处理结果输出的现代化电子设备。 计算机硬件组成部分 冯.诺依曼体系结构: 1946年数学家冯.诺依曼提出运算器、控制器、存储器、…

    2018-03-27
  • 马哥教育21期网络班—第8周课程+练习—-成长进行时–不退步

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:一种网路装置,负责网路桥接,将网络的多个网段在数据链路层连接起来。 集线器:将多条以太网线或光纤集合连接在同一段物理介质下的装置。工作在物理层。 二层交换机:工作在数据链路层,交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通…

    Linux干货 2016-08-24

评论列表(1条)

  • renjin
    renjin 2017-04-28 11:20

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