glob - 形成路径名称
描述 (DESCRIPTION)
很久以前 在 UNIX V6 版 中 有一个 程序 /etc/glob 用来 展开 通配符模板. 不久以后 它 成为 shell 内建功能. 现在 人们 开发了 类似的 库函数 glob(3), 让 用户程序 实现 同样的 功能.
此 规则 遵循 (POSIX 1003.2, 3.13).
通配符匹配 (WILDCARD MATCHING)
包含 '?', '*' 或 '[' 字符的 字符串 称为 通配符模板(wildcard pattern). 形成路径名(globbing) 指 一种 操作, 把 通配符模板 展开为 匹配 该串的 路径名. 匹配 定义为:
不在 方括弧中 的 '?' 匹配 任意 单个 字符.
不在 方括弧中 的 '*' 匹配 任意 字符串, 包括 空串.
字符集 (Character classes)
对于 表达式 `[...]', 如果 在 第一个 '['符 后面 出现的 第一个 字符 不是 '!', 则 该 表达式 匹配 任意 一个 在 `[...]'内 出现的 字符. 方括弧内 不能 有 空串, 因此 ']' 可以 作为 第一个 字符 出现在 方括弧内. (像 这样, '[][!]' 匹配 下列三个 字符 中的 任意 一个, '[', ']' 和 '!'.)
范围集 (Ranges)
字符集 有一个 特例: 用 '-' 分开的 两个 字符 表示 一个 范围集. (像 这样, `[A-Fa-f0-9]' 等于 `[ABCDEFabcdef0123456789]'.) 把 '-' 放到 方括弧内 的 开头 或 最后 可以 获得 它的 本意. (像 这样, `[]-]' 匹配 ']'和'-' 中 任意 一个. 而 `[--/]' 匹配 `-', `.' 和`/'中任意 一个.)
补集 (Complementation)
表达式 '[!...]' 表示 一个 字符, 该 字符 不匹配 方括弧内 去掉 开头 '!' 后的 表达式. (像 这样, `[!]a-]' 匹配 除了 ']', 'a' 和 '-' 的 任意 一个 字符.)
要 去掉 '?', '*' 和 '[' 的 特殊 含义, 可以 通过 前面 加 一个 反斜杠; 或者 在 shell 命令行 中, 通过 引号 来 引用 这些 字符. 在 方括弧内 这些 字符 显露出 本意, 所以, '[[?*\]' 匹配 这 四个字符中 的 一个: '[', '?', '*', '\'.
路径名 (PATHNAME)
形成路径名 功能 应用于 路径 中 的 每一个 成员部分. 路径 中 的 '/' 不能 被通配符 '?' 或 '*', 或 范围集 如 '[.-0]' 匹配. 范围集 不能 直接 包含 '/', 否则 导致 语法错误.
如果 待匹配的 文件名 以'.'开头, 那么 这个 '.' 字符 必须 直接 给出. (比如说, 用 'tar c .' 会 更好.)
空列表 (EMPTY LISTS)
上述的 简单优雅 规则, 把 通配符模板 展开为 匹配的 路径名, 来源于 最初的 UNIX 定义. 它 允许 展开出 空串, 例如
xv -wait 0 *.gif *.jpg
这里 可能 没有 *.gif 文件 (而且 不算 错误).
然而, POSIX 要求 句法 错误 或 路径名 列表 为 空 时, 保留 通配符模板 不变. (译注: 即 不展开.)
在 bash 中 可以 通过 设置 allow_null_glob_expansion=true 把 它 强置为 传统的 风格. (其他 地方 也有 类似的 问题, 例如, 老式的 语句 是
rm `find . -name "*~"`
新的 写法 为
rm -f nosuchfile `find . -name "*~"`
以 避免 由于 空参数调用 rm 而 产生 错误信息.)
注意 (NOTES)
正规表达式 (Regular expressions)
注意, 通配符模板 不是 正规表达式, 尽管 它们 有点象. 首先, 它 匹配 文件名, 而 不是 正文; 其次, 规则 不一样, 例如 正规表达式 里 的 '*' 代表 零个或多个 前面内容的 重复.
正规表达式 的 方括弧表达式 用 '^' 引导 取反操作, (而不是 '[!...]'). POSIX 声明, 在 通配符模板 中, '[^...]' 未做 定义.
字符集 和 国际化 (Character classes and Internationalization )
当然, 范围集 最初 指 ASCII的 范围, 因此 '[ -%]' 意思是 '[ !"#$%]',
一些 UNIX实现 把 这个 归纳为: 范围 X-Y 指 X的编码 到 Y的编码 之间的编码字符. 可是, 这 要求 用户 知道 他们 本地系统的 字符编码, 此外, 如果本地的 字母表顺序 和 字符集顺序 不对应, 那 就 更不方便了.
因此, POSIX 对 通配符模板 和 正规表达式 的 方括弧表达法 作了 重大扩展, 上面 我们 知道了 方括弧表达式 中 的 三个 类型, 它们是 (i) 取补集 (ii) 直接列出的 单个字符 和 (iii) 范围集.
POSIX 对 范围集 在 国际化 方面 作了 更有力的 说明, 并且 增加了 三个 类型:
(iii) 范围 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.]]'.
glob - 形成路径名称的更多相关文章
- Foxpro数据库连接错误解决方法--【VFP DBF文件不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器】
直接访问vfp dbf文件时报错: 错误描述: 'd:\vfpData\test.dbf'不是一个有效的路径. 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器. 解决办法:Data Sour ...
- python获取某路径下,某种特定类型的文件名称,os.walk(路径)生成器;os.listdir(路径),os.path.splitext(名称),os.path.join(路径,名称),os.path.isdir(路径\名称)
#获取某文件夹下制定类型文件# import os# def filep(fp):# l=[]# a=os.walk(fp) #生成器# for nowp,sonp,oth in a: #当前目录,子 ...
- 【转】如何解决Ubuntu终端里面显示路径名称太长
原文网址:http://jingyan.baidu.com/article/3d69c5516c129df0ce02d77b.html Ubuntu 默认的终端下面,进入很多层的目录后,前面那个提示符 ...
- Python根据路径名称获取文件的名称以及所在的路径
大神一看题目就知道用python中的string.split('\'),记得之前处理大量的文件的时候,有时候有几十万的文本文件,经常会读取获取名称,并且保存为名字一样的另外一种格式的文件 其实pyth ...
- Python模块学习:glob 文件路径查找
glob模块是最简单的模块之一,内容非常少. 用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多. 查找文件只用到三个匹配符:”*”, “?”, “[]”. ”*”匹配0个或 ...
- 解决Ubuntu终端里面显示路径名称太长
方法/步骤 找到配置文件先进行备份: cp ~/.bashrc ~/.bashrc-bak 找到配置文件修改: vi ~/.bashrc 备份是为了防止配置修改出错,可以还原: 下面是我的/h ...
- Ubuntu终端里面显示路径名称太长,怎么设置变短【转】
转自:http://blog.csdn.net/id19870510/article/details/8276914 $: sudo vi ~/.bashrc 这个文件记录了用户终端配置 找到 if ...
- 根据ID和parentID利用Java递归获取全路径名称
如下图所示,本文参考资源:https://jie-bosshr.iteye.com/blog/1996607 感谢大佬的无私奉献. 思路: 定义一个方法getParentName参数为int类型的c ...
- 获取driver网络路径名称
'get the web path of the drive s: Dim MM As New Management.ManagementObject(String.Format("win3 ...
随机推荐
- Eclipse如何查看接口实现类快捷键
1.找到要打开的接口类 2.双击接口名选中 3.按Ctrl+T打开接口实现类 以List接口为例,如下所示
- 1004 Counting Leaves (30 分)
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family member ...
- css控制页面文字不能被选中user-select:none;
现象:html中可能有些地方不想让用户复制文字,或是用a标签做了个点击按钮,点快的时候文字会被选中,很丑,这个时候可以使用下面的方案禁止文字选中. 原因:鼠标点快了文字会被选中. 解决方案:不同的浏览 ...
- 模型验证 IValidatableObject 无法进入 Validate 方法的原因
模型的属性的类型为 decimal 时无法进入 Validate 方法 public decimal Age { get; set; } 当把属性的类型改为可空类型时 则可以进入 Validate 方 ...
- DirectX实现球面纹理映射
http://www.cnblogs.com/graphics/archive/2011/09/13/2174022.html DirectX实现球面纹理映射 介绍 球面纹理映射就是将一个平面纹理映射 ...
- SpringBoot 2.0 集成 JavaMail ,实现异步发送邮件
一.JavaMail的核心API 1.API功能图解 2.API说明 (1).Message 类: javax.mail.Message 类是创建和解析邮件的一个抽象类 子类javax.mail.in ...
- Tomcat 连接池调优
性能较好的Tomcat 配置文件内容 <Context> <Resource name="jdbc/pgsql" type="javax.sql.Dat ...
- JAVA实训总结 :String
String是特殊的类,与其他基本类型并不相同,是被java封装的类型 String底层组成对象为数组与字典(字符集编码表) String 类型的字符串是存储在JVM特别开辟的字符串常量池中 创建 ...
- 「开源」SpringCloud+vue搭建的商城项目
最近在研究SpringCloud,看到一个基于SpringCloud+vue搭建的模拟商城项目.用来辅助学习SpringCloud企业级开发还是很有帮助的.强烈推荐!! 源码地址在最后. spring ...
- Access restriction: The type 'JPEGCodec' is not API
问题 今天导入项目时Eclipse报错如下: Access restriction: The type 'JPEGCodec' is not API (restriction on required ...