热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

find的-regex与-name的区别

find的-regex与-name的区别1.与-name,-iname最大的区别就在于-regex是把find输出的整个结果(有别于绝对路径名)作为要匹配的对象,而不仅仅是结果的最后一部分www.2cto.com举例/tmp目录下有且仅有...
find的-regex与-name的区别
 
1. 与-name, -iname最大的区别就在于 -regex是把find输出的整个结果(有别于绝对路径名)作为要匹配的对象, 而不仅仅是结果的最后一部分
  www.2cto.com  
举例
    /tmp目录下有且仅有 aaa, aa, 1, 2 这些文件
    find -name "a*"可以找到
    aaa和aa
    而find /tmp -regex "a*"就不行, 它一个都找不到, 因为找到的每个结果是这样的
    /tmp/aaa
    /tmp/aa
    -name 是对结果中的"aaa"和"aa"这个部分进行匹配, 而-regex却是对完整的
    "/tmp/aaa"和"/tmp/aa"进行匹配.
    所以你要写作find /tmp -regex ".*a.*"
2. 注意上面的是.*而不是*
  www.2cto.com  
-name所能解释的是基于shell中file glob的匹配字符, 包括:
    (1)*表示任意长度字符串
    (2)?表示任意的单个字符
    (3)[set] 表示一个可选字符集合
    (4)[^set]或[!set]表示以ASCII为全集对[set] 求补集的一个集合
    (5)brace expansion, 即把/tmp/{a,b,c}扩展为三个字串
    /tmp/a /tmp/b 和/tmp/c
    注意 shell的file globing机制往往不被认为是正则表达式.
-regex接受的是"正统"的正则表达式
    这个说起来东西多了, 基本上它跟emacs文档里讲的regex是一样的, 因为find手册里regex的解释部分实际就是链接到emacs 中讲解regex的那个部分. 在上面例子中最大区别就是.* 来表示任意长度字符串.
 

推荐阅读
author-avatar
大飞5678
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有