文件通配符是啥?

文件通配符

    包含 ‘?’, ‘*’ ‘[‘ 字符的字符串称为通配符模板(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 之间所有的字符组成(包括XY), 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)
上一篇 2017-04-23 14:15
下一篇 2017-04-23 15:36

相关推荐

  • Linux中高级文件系统管理

    一、磁盘配额管理             定义:限制普通用户对某个目录写空间大小的限制     1、此策略是针对文件系统,并非硬盘     2、可以根据不同组和不同用户进行不同的策…

    Linux干货 2016-08-29
  • 阿里云2G2C的ECS部署LNMP性能瓶颈到底在多少

    服务器详细配置 Project message System info LSB Version:      :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch Distributor ID: CentOS Description: &n…

    Linux干货 2015-04-16
  • 软件包管理–RPM YUM

    包管理器 二进制应用程序的组成部分 二进制文件,配置文件,说明文档,库文件 程序包管理器 Debian  deb文件  dpkg包管理器 Redhat  rpm文件  rpm包管理器                   &nbsp…

    Linux干货 2016-08-21
  • 16个很有用的在线工具

    1. ExplainShell.com 命令解释 对于Linux用户来说每天都会写各种命令和脚本,那么你可以使用这个网站工具来查看命令式如何工作的,这样可以避免不必要的错误出现;也是一个很好的学习命令的方式 2. BashrcGenerator.com 定制个性命令提示符 简单说就是个性化生成命令提示符,可将生成的代码…

    Linux干货 2015-03-13
  • 搭建yum仓库的FTP服务器

    搭建centos7ftp服务

    2017-12-02
  • 文件、目录2——Linux基本命令(8)

    1.复制文件和目录 cp  SRC  DEST 源 目的地 规则: 如果目标目录下还有一个目录与源文件同名,则无法复制:            -i 覆盖前提示        &n…

    2017-07-18

评论列表(1条)

  • renjin
    renjin 2017-04-28 11:20

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