Shell命令find和grep详解及正则表达式和通配符的区别

Shell命令find和grep详解及正则表达式和通配符的区别

find——较复杂的方式查找文件

  • find命令的完整语法格式:

    find [path] [options] [tests] [actions]

  • 命令各部分详解:

    • path即查找的路径,可以使用绝对路径,也可以使用相对路径。

    • options:选项参数

      选项含义
      -depth在查看目录本身之前先搜索目录的内容(始终为true)
      -follow跟随符号链接
      -maxdepth N最多搜索N层目录
      -mount(或-xdev)不搜索其他文件系统中的目录
    • tests: 测试选项

      test参数描述
      -cmin n匹配n分钟前改变状态(内容或属性)的文件或目录。如果不到n分钟,就用-n,如果超过n分钟,就用+n
      -mmin n匹配n分钟前改变内容的文件或目录
      -mtime n匹配n天前改变内容的文件或目录
      -empty匹配空文件及空目录
      -name pattern匹配有特定通配符模式的文件或目录,pattern必须用引号扩起,确保传递给find命令而不是由shell处理
      -iname pattern与-name相似,只是不区分大小写
      -newer file匹配内容的修改时间比file文件更近的文件或目录
      -size n匹配n大小的文件
      -type c匹配c类型的文件
      -user name匹配属于name用户的文件和目录。name可以描述为用户名也可以描述为该组的ID号
      -perm mode寻找访问权限与既定模式匹配的文件或目录。既定模式可以以八进制或符号的形式表示
      -inum n匹配索引节点是n的文件
      -group name匹配属于name组的文件或目录。name可以描述为组名,也可以描述为该组的ID号

      下面着重讨论 -size n-type c

      • -size n

        其支持的计量单位如下表所示:

        字母单位
        b512字节的块(block)
        c字节(char)
        w两个字节的字(word)
        kKB(每单位包含1024字节)
        MMB(每单位包含1,048,577字节)
        GGB(每单位包含1,073,741,824字节)

        注意:”+“和”-“的用法适用于所有用到数值参数的情况。”+“代表超过,”-“代表未超过。

        比如:-size +1M,代表查找的文件大小比给定的数值1M大

      • -type c

        其支持的文件类型如下表所示:

        文件类型描述
        bblock,块设备文件
        cchar,字符设备文件
        ddirectory,目录
        ffile,普通文件
        llink,符号链接

      test参数之间的逻辑关系如下表所示:

      操作符功能描述
      -and(与操作)and是默认的逻辑关系,两个测试均为真。有时缩写为-a
      -or(或操作)两个测试一个为真。有时缩写为-o
      -not(非操作)测试取反。有时缩写为!
      ( )(括号操作)提高可读性,以组成更长的表达式。通常用反斜杠“\"来避免特殊含义
    • actions:动作选项

      动作功能描述
      -delete删除匹配文件
      -ls对匹配文件执行ls操作
      -print将匹配的文件的全路径以标准形式输出。未指定操作时是默认操作
      -quit一旦匹配成功便退出
      -exec command执行一条命令,该命令可以是用户想要执行的操作命令
      -ok command与-exec类似,但是执行命令之前会针对每个要处理的文件,提示用户确认

      下面着重讨论 -exec command

      • -exec command {} ;

        其中command表示要执行的命令,魔术字符串{}花括号是一个特殊类型参数,表示当前文件的完整路径。分号;代表分隔符,是必须的,表示命令结束。

        通常将{}和;用反斜杠\或者引号’ '进行转义,因此,上述命令也变成-exec command \{\} \;


grep(global regular expression print)

  • grep与正则表达式有关,用来搜索文本文件中与指定正则表达式匹配的,并将结果送至标准输出。

  • grep命令完整语法格式:

    grep [options] PATTERN [files],如果没有提供文件名,grep将搜索标准输入。

  • 命令各部分详解:

    • options:选项参数

      选项功能描述
      -c输出匹配行的数目,而不是输出匹配的行,也可以用–count指定。
      -E启用扩展正则表达式(Extend Regular Expression)。
      -h进行多文件搜索时,抑制文件名输出。也可以用–no-filename指定。
      -i忽略大小写,不区分大写和小写字符,也可以用–ignore-case指定。
      -l输出匹配项文件名而不是直接输出匹配行自身,也可以用–files-with-matches指定。
      -v对匹配模式取反,即搜索不匹配行而不是匹配行,也可以用–invert-match指定。
      -n在每个匹配行面前加上改行在文件内的行号,也可以用–line-number指定。
    • PATTERN:正则表达式

      • 常用特殊字符:

        字符含义
        ^指向一行的开头
        $指向一行的结尾
        .任意单个字符
        [ ]方括号内包含一个字符范围,其中任何一个字符都可以被匹配。在方括号内加入 ^,构成 [^ ab] 表示反向字符范围,即不匹配指定范围内的字符;在方括号内加入连字符 -,构成 [ a-z],表示字符范围。
      • 特殊匹配模式:

        匹配模式含义
        [:alnum:]字母与数字字符
        [:alpha:]字母
        [:ascii:]ASCII字符
        [:blank:]空格或制表符
        [:cntrl:]ASCII控制字符
        [:digit:]数字
        [:graph:]非控制、非空格字符
        [:lower:]小写字母
        [:print:]可打印字符
        [:punct:]标点符号字符
        [:space:]空白字符,包括垂直制表符
        [:upper:]大写字母
        [:xdigit:]十六进制数字
      • 扩展正则表达式字符:

        字符含义
        匹配是可选的,但最多一次。即匹配某元素0次或一次。
        *匹配某元素0次或多次
        +匹配某元素1次或多次
        {n}前面的元素恰好出现n次匹配
        {n,m}前面的元素出现的次数在n~m次之间则匹配,包括n和m
        {n,}前面的元素出现次数超过n次(包括n次)则匹配
        {,m}前面的元素出现次数不超过m次则匹配

写在最后:注意区分通配符和正则表达式。

因为find有-name pattern,其中pattern是通配符模式

grep [options] PATTERN,其中PATTREN是正则表达式

正则表达式和通配符有本质区别:

  • 正则表达式用来找:[文件]内容,文本,字符串。一般三剑客grep(egrep)、sed、awk支持
  • 通配符用来找:文件名。普通命令都支持

如何区分正则表达式和通配符:

  • 不需要思考的判断方法:在grep(egrep)、sed、awk中的都是正则表达式,其他都是通配符

  • 在[[ string=~ regex ]]中是正则表达式

  • 文件目录名 ====> 通配符

    文件内容(字符串、文本、[文件]内容)====> 正则表达式

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值