文件通配符是啥?

文件通配符

    包含 ‘?’, ‘*’ ‘[‘ 字符的字符串称为通配符模板(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)
TQTTQT
上一篇 2017-04-23
下一篇 2017-04-23

相关推荐

  • 正则表达式

    正则表达式课程笔记

    2017-11-05
  • find查找

    find查找是生产中最常见的日志查找工具 下面看看它的用法 基本用法: find    查找路径    查找标准    查找到以后的处理动作 查找路径:需要被查找的文件所在的路径,一定是个目录,默认情况下为当前的目录 查找的标准:查找的时候用什么方式去查找 处理动作:文件查找完毕后,需要对查找出来的…

    Linux干货 2017-05-08
  • 软件包管理

    软件包管理 在linux中有人多的软件使用,比如我们使用的ifconfig,fdisk,btrfs文件系统等。可能这些软件在你原有的linux系统中并不存在,那么我们如何去使用这些工具呢。我们知道windows在需要软件的时候需要安装,当然对于linux系统一样需要安装。在linux下常用的安装工具我们使用的是rpm程序包(当然我们这边是针对CentOS而言…

    Linux干货 2016-08-19
  • shell脚本编程之循环语句

      在运行脚本时重复执行一系列的命令是很常见的,这时我们就需要使用循环语句来达到这个目的。 一、for命令   格式:for 变量 in 列表;do          循环体       done   for命令会遍历列表中的每一个值,并且在遍历完成…

    Linux干货 2016-01-03
  • N27_网络班第八周作业

    1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间所有主机的在线状态; 在线的主机使用绿色显示; 不在线的主机用红色表示; #!bin/bash # for i in `seq 254`;do if ping -c 1 192.168.68.$i &> /dev/null;then echo -e “…

    2017-09-28
  • 系统管理之磁盘管理(二)磁盘配额,RAID,LVM

    上篇博文给大家介绍了磁盘和文件系统的基础知识,也是最基本的使用.在实际生产环境中,对于磁盘的使用,要求稳定,灵活,那么下面给大家分享下磁盘的高级用法.磁盘配额,RAID,LVM等相关知识. 1.磁盘配额2.磁盘RAID3.LVM 一.磁盘配额 1.概述: • 在内核中执行 • 以文件系统为单位启用 • 对不同组或者用户的策略不同…

    Linux干货 2016-09-05

评论列表(1条)

  • renjin
    renjin 2017-04-28 11:20

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