Linux查找包含指定字符串的文件

  1. Linux查找指定目录下,包含特定字符串的文件
    使用Linux经常遇到,只知道文件包含特定字符串,但是不知道具体的文件名,(比如筛选日志文件),需要根据特定的字符串反向查找文件

  2. 查找当前目录下,包含Hello字符串的所有文件

    1. 方式1:利用grep进行查找过滤,结果高亮显示

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      grep -rn "Hello" ./

      #根据文件类型筛选
      grep -R --include="*.log" "Hello" ./

      #参数解释
      -i 不区分大小写
      -l 只列出匹配的文件名
      -L 列出不匹配的文件名
      -w 只匹配整个单词,而不是字符串的一部分(如匹配"Hello",而不匹配"Hello111")
      -C num 匹配的上下文分别显示num行
      -c 指输出匹配行的计数
      -r 递归搜索子目录
      -d skip 忽略搜索子目录,使用时目录下需加*,如grep -d skip "Hello" ./*
      -n 显示关键字位于查找文件的哪一行
      -v 显示不包含匹配文本的所有行
      -h 查询多文件时,不显示文件名

      #匹配规则
      /< 和 >/分别标注单词的开始和结尾
      ^ 和 $ 分别表示正则的开始行
      pattern1 | pattern2 匹配:pattern1 或者 pattern2
      pattern1 ./ grep pattern2 显示既匹配pattern1 又匹配pattern2的行
      如果有很多输出,可以通过管道将其输出到less上阅读

      #目录查询
      ls -l | grep "^d" 查询当前目录下的目录
      ls -l | grep "^d…..x..x" 查询具有可执行权限的目录集合
    2. 方式2:利用find加管道进行过滤

      1
      2
      3
      find ./ | xargs grep "Hello" 或者 find ./ -exec grep "Hello" {} \;

      匹配文件类型 -type f -name "*.log"
-------------本文结束感谢您的阅读-------------
分享不易,请我喝杯咖啡吧~~~