zoukankan      html  css  js  c++  java
  • Shell常用命令find、grep总结

    一、find 命令

      find 命令的常用形式可以简化为 

    1 find [path...][expression]
    •  path:find 命令查找的目录路径,其中 ./ 表示当前目录,/ 表示系统根目录
    •  expression:可以分为
    1 -options [-print -exec -ok ...]
      •  -options:指定 find 命令的常用选项
      •  -print:find 命令将匹配的文件输出到标准输出
      •  -exec:find 命名对匹配的文件执行该参数所给出的 shell 命令
      •  -ok:与 -exec 类似,只不过在执行每一个命令之前都会给出提示,让用户决定是否执行    

    1. find 命令的常用选项

    •  -name

      按照文件名查找文件。

    1 # 在当前目录与子目录下查找txt后缀的文件
    2 find ./ -name "*.txt"
    •  -mtime -n +n  

      按照文件的更改时间来查找文件,-n 表示文件更改时间在 n 天之内,+n 表示文件更改时间在 n 天之外。

    1 # 查找在当前目录下2天内修改的文件
    2 find ./ -mtime -2
    •  -newer file1

      查找比文件 file1 新(即更改时间晚)的文件

    1 # 查找当前目录下比1.txt新的文件
    2 find ./ -newer 1.txt
    • -type

      查找某一类型的文件,例如

        d - 目录

        f - 普通文件

        b - 块设备文件

        c - 字符设备文件

        p - 管道文件

        l - 符号链接文件

    1 # 在当前目录查找所以目录文件
    2 find ./ -type d
    • -size n

      查找大小为 n 的文件,末尾带有 c 时表示文件大小以字节计,带 k 时表示文件大小以 KB 计,以此类推。

    1 # 查找当前目录下大小大于10k的文件
    2 find ./ -size +10000c

    2. find 与 xargs 搭配

      xargs 与 -exec 类似,对 find 命名匹配的文件执行该参数所给出的 shell 命令,并且效率更高。

     1 # 查找当前目录下所有文件并输出文件类型
     2 find . -type f -print | xargs file 
     3 
     4 # 查找当前目录下所有txt文件并将结果输出到txt.log文件,一行输出一个结果
     5 find . -name "*.txt" -print | xargs -n1 > /e/txt.log
     6 
     7 # 查找当前目录下的所有文件并在这些文件中搜索add_experience并将结果输出到文件
     8 find . -type f | xargs grep "add_experience" > /f/add_experience.txt
     9 
    10 # 删除3天以前的所有文件和文件夹
    11 find ./ -mtime +3 -print | xargs rm -f -r
    12 
    13 # 删除文件大小为0的文件
    14 find ./ -size 0 | xargs rm -f

    二、grep 命令

      grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。它的命令格式一般为:

    1 grep [option] "pattern" filename
    • option 常见选项
      •  -c:只输出匹配行的计数
      •  -i:不区分大小写(只适用与单字符)
      •  -n:显示匹配行及行号
      •  -s:不显示不存在或无匹配文本的错误信息
      •  -v:显示不包含匹配文本的所有行
      •  -o:只显示文件中匹配到的部分
      •  -l:列出匹配的文件清单
      •  -L:列出不匹配的文件清单
    •  pattern:要搜索的关键字或正则表达式语句
    •  要搜索的文件名

    1.简单使用

      如下所示:

    1 # 查找1.txt中存在aaa的行,并输出行号
    2 grep -n "aaa" 1.txt

    2. 正则表达式

      正则表达式主要元字符及使用如下表所示:

    元字符

    功能

    例子

    匹配什么

    ^

    锚定行的开始

    /^love/

    匹配所有以love开头的行

    $

    锚定行的结束

    /love$/

    匹配所有以love 结束的行

    .

    匹配一个字符

    /l..e/

    匹配这样的行,这些行包含这样的字符:第一个字符是l,紧跟着两个字符,然后是e

    *

    代表0个或多个先前字符

    /*love/

    匹配所有这样的行,有0个或多个空格,空格后跟着love

    []

    匹配字符组中的一个字符

    /[Ll]ove/

    匹配所有包含love或者Love的行

    [^]

    匹配一个不在范围内的字符

    /[^A-Z]ove/

     

    <

    锚定单词的开始

    <love

    匹配所有这样的行,这些行包含以love开头的单词(vi和grep支持这个功能)

    >

    锚定单词的结束

    Love>

    匹配所有这样的行,这些行包含以love结束的单词(vi和grep支持这个功能)

    (..)

    标记后面用到的匹配字符

    /(love)able1rs/

    最多可以使用9个标签。第一个标签是模板最左边的部分。在本例子中,模板love保存的标签为1,后面的1指得就是love;本例子搜索的是这样的行,这些行包含这样的字符,在Loveabel后面跟着lovers

    x{m}

    M次复制字符x

       

    x{m,}

    至少m次复制字符x

       

    x{m,n}

    至少m次,至多n次复制字x

       

    w

    文字和数字字符,[A-Za-z0-9]

    Lw*e

    匹配一个L字符,紧跟着0个或多个文字或数字字符,然后是e

    W

    同上

       

    b

    单词分界线

    bloveb

    仅仅匹配单词love

     

      简单使用如下:

    1 # 搜索aaa开头的行
    2 grep -n '^aaa' 1.txt
    3 
    4 # 搜索至少包含连续3个a的行
    5 grep -n 'a{3,}' 1.txt
    6 
    7 # 搜索包含aaa或者daa的行
    8 grep -n '[ad]aa' 1.txt
  • 相关阅读:
    v-bind绑定属性样式——class的三种绑定方式
    vue知识点15
    iOS开发——heightForHeaderInSection设置高度无效
    iOS开发——AFNetworking基于https的使用
    iOS开发——循环遍历的比较
    iOS开发——Block使用小结
    iOS开发——GCD总结
    iOS开发者中心重置设备列表
    iOS开发—— Couldn't add the Keychain Item
    iOS——扬声器与听筒的切换
  • 原文地址:https://www.cnblogs.com/coderJiebao/p/linux01.html
Copyright © 2011-2022 走看看