【Linux命令】在当前目录下查找出现特定字符串的文件位置信息

有时候咱们我会碰到这样的问题:我要查找一个字符串在多个文件里总共出现了几回,或者一个方法、一个函数在项目里调用了几回,都在哪里调用,那咱们要如何查找,如何统计这些信息呢?java


场景复现


首先,要查找字符串,确定优先考虑全局搜索命令grep(global search regular expression and print out the line:正则匹配全局搜索并打印行)。若是搜索的范围比较不明确,只知道在某个文件夹下,那能够先cd该目标路径,而后用如下最简单的命令:express

grep -rn "待匹配字符串" ./函数

r :表示递归excel

n :表示查询结果显示行号code

结果是这样的: 【文件路径】:【行号】 【当前行信息】blog

以下图:递归

image

若是你知道的范围缩小了,或者只想在一些特定类型的文件中查找,好比,只想在该目录下的全部java文件查找,能够用如下的方式:字符串

find ./ -type f -name "*.java" | xargs grep -rn "待匹配字符串"io

以下图:模板

image

该命令的做用是在当前目录下,查找全部java文件,而后将每一个文件的路径做为参数传给grep "待匹配字符串"命令,最终输出结果,换句话说,就是只在当前目录下的java文件中查找字符串

可能你拿到结果,还想记录到文件中,那么能够用如下命令:

touch file.txt

find ./ -type f -name "*.java" | xargs grep -rn "待匹配字符串" | info.txt

该命令将上面的结果经过管道输出到文件中,再配合一波excel,想干啥干啥

文件里就写入了,以下图

image

而后你又说我不用记录,只想统计在该目录下的java文件里出现了几回,那就用:

find ./ -type f -name "*.java" | xargs grep -rn "待匹配字符串" | wc -l
以下图:

image

你可能又会说,我我查的字符串是个方法名,我想查看一下后面的函数体实现,但查出的文件路径好长,懒得cd进去,那你能够估算一下方法体的行数大小,从上面查询到的文件路径和行号信息,执行一下命令直接看

sed -n 100,200p "file.java的路径"

该命令会将模板文件的100-200行打印出来

以下图:

image

有没有更实用的场景呢,欢迎留言讨论!