【命令】Linux查找命令:【find】、【grep】、【xargs】、【管道】




1、查找命令

  grep、find都是查找命令,两者可以通过管道命令、xargs结合起来使用,从而在指定文件中查找指定内容。

  这里首先记录几个命令结合起来的用法,然后说明每个命令的用法。


1.1 find、grep、管道、xargs结合使用:在指定文件中查找指定内容。

  • 示例:从当前目录开始查找【所有.c文件和.h文件】,并在这些.c文件中查找【lsydebug】,不区分大小写,且显示行号

    find . -name "*.[ch]" | xargs grep -nir "lsydebug"
    

    结果展示:

    $ find . -name "*.[ch]" | xargs grep -nir "lsydebug"
    ./test.c:7:#define LSYdebug
    ./board/ti/am43xx/mux.c:15://#define lsydebug(fmt,args...)
    ./board/ti/am43xx/mux.c:140:    lsydebug("--------------->lsy\r\n");
    ./board/ti/am43xx/mux.c:147://        lsydebug("--------------->lsy,board_is_evm.\r\n");
    ./board/ti/am43xx/board.h:20://#define lsydebug(fmt,args...)
    ./board/ti/am43xx/board.h:49:    lsydebug("-------------------->lsy add log, board_is_evm() \r\n");
    

1.2 find:查找文件

  • 格式

    find  [path] -option [文件名查找规则]  [expression]
    
    (1)find命令解析规则:
        find 根据下列规则判断 path 和 expression:
        在命令上第一个 - ( ) , ! 之前的部份为[path],之后的是[expression]。
        
        如果 path 是空字串则使用目前路径,
        如果 expression 是空字串则使用 -print 为预设 expression。
    
    (2)参数:
        -name       按名称查找
    
        注意:文件大小查找这里:k为小写,G M为大写,否则无法查找。
        -size 4k    查找等于4k的文件
        -size -4k   查找小于4k的文件
        -size +4k   查找大于4k的文件
    
        -perm 555   查找权限为555的文件
    
        -a          and,逻辑与,连接2个表达式
        -o          or,逻辑或,连接2个表达式
        -not        not,逻辑非
        
    (3)注意:
        文件名如果想要匹配规则的话,必须使用双引号括起来,如 "*.[ch]",如不加双引号会报错。
        
    (4)-exec 和 -ok
        -exec 和 -ok参数后面接第二条命令,find的结果交给后面的第二条命令处理。
        当该2条命令出现时,后面有固定搭配:{} \;
        {}表示find找到的结果
        \;表示结束命令
        例如:
            查找LSY.c文件,并将该文件改名为lsy.c
            find . -name LSY.c -exec mv {} lsy.c \;
        
        两个命令的区别是:
        -exec会直接将find的结果进行处理;
        -ok会先询问是否要进行处理,用户同意后才会执行。
        
    
  • 示例1:查找当前目录下所有的.c文件和.h文件

    find . -name "*.[ch]"
    
  • 示例2:查找当前目录下所有权限为664的文件

    find . -perm 664
    

1.2.1 参数:-exec 和 -ok

  • 参数解析

    -exec 和 -ok参数后面接第二条命令,find的结果交给后面的第二条命令处理。
    当该2条命令出现时,后面有两个符号需要同时出现: {} \;
    其中:
        {}  表示find找到的结果
        \;  表示结束命令
    
    两个命令的区别是:
        -exec会直接将find的结果进行处理;
        -ok会先询问是否要进行处理,用户同意后才会执行。
    
  • 示例3:查找LSY.c文件,并将该文件改名为lsy.c

    find . -name LSY.c -exec mv {} lsy.c \;
    
  • 示例4:将当前目录下所有权限为664的文件,全部修改权限为777

    find . -perm 664 -exec chmod 777 {} \;
    
  • 示例5:将当前目录下所有.c .h文件的权限全部修改权限为777

    find . -name "*.[ch]" -exec chmod 777 {} \;
    
  • 示例6:查找当前目录下大小为4k的文件

    find . -size 4k
    
  • 示例6:查找当前路径下大于4k,且小于20k的文件

    find . -size +4k -a -size -20k
    
  • 示例6:查找查找当前路径小于4k,或者大于20k的文件

    find . -size -4k -o -size +20k
    
  • 示例7:查找当前目录下【除了.c .h】之外的所有文件(-name "*.[ch]"是一个整体 ,所以-not必须放在前面)

    find . -not -name "*.[ch]"
    

1.2 grep:查找内容

  • 格式:

    格式:
        grep [OPTIONS] PATTERN [FILE...]
    即:
        grep 【选项】 【"要查找的字符串"】 【文件名】
        
    options:
        -n                显示行号
        -i                不区分大小写
        -c                统计文件中字符串的个数
        -w                完整匹配(即:匹配完整的字符串,忽略子字符串)
        --include="file"  在【指定文件(如:file.txt)】或者【指定某类文件(如:*.c)】中查找。备注:一个命令中可以多次使用该参数,具体见后面例子
        
    如果想要递归的查找多个文件,则要加上下面参数:
        -r                递归地读取每个目录下的所有文件(如果想要指定一个路径,查询路径下所有文件则需要用到该参数)
    
  • 示例1:

    在当前目录下的【test.sh】文件中查找【ARCH】字符串,并显示行号

    grep -n "ARCH" test.sh
    
  • 示例2:在当前目录下的【test.sh】文件中查找【ARCH或者arch】字符串(不区分大小写),并显示行号

    grep -ni "ARCH" test.sh
    
  • 示例3:在当前路径下【所有文件中】查找字符串【lsydebug】,并显示行号,且不区分大小写

    grep -nri "lsydebug"
    
  • 示例4:统计指定文件【test.sh】中【ARCH】的个数,不区分大小写

    grep -ci "ARCH" test.sh
    
  • 示例5:在所有【.c】中查找【board_nand_init】,不区分大小写

    grep -nirw --include="*.c" --include="xxx_*.dts" board_nand_init
    

1.3 扩展:find查找文件,并直接用vim打开

  • 命令

    备注:如果有多个重名文件,则会直接打开所有文件

    find . -name test.c -exec vim {} \;
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值