grep -rl "math\.tan" /media/data_1/everyday/2025_down --include="*.py"
在一个大文件夹下, .py脚本中递归查找含有"math.tan"字段的
grep -rl "math\.tan" /media/data_1/everyday/2025_down --include="*.py"
这条命令是一个在 Linux/Unix 系统中非常经典的 文件内容搜索组合拳。它的核心作用是:在指定目录及其所有子目录 under,寻找所有包含 math.tan 的 Python 文件,并只列出这些文件的路径。
下面为你逐项拆解这个命令的每一个参数和细节:
1. 核心命令
grep:Linux 中最强大的文本搜索工具(Global Regular Expression Print)。它能根据你指定的模式(Pattern)在大规模文本或文件中进行匹配。
2. 组合参数:-rl
这两个字母实际上是两个独立参数的缩写合并:
-r(或--recursive):递归搜索。告诉grep不要只看当前目录,还要钻进指定目录下的所有子目录、孙目录中去一层层查找。-l(或--files-with-matches):只显示文件名。默认情况下,grep会把匹配到的那一行具体内容打印出来。加上-l后,它一旦在某个文件中找到了匹配项,就会立刻停止读取该文件,并仅仅输出该文件的路径。这在你想批量找文件进行后续处理时非常有用。
3. 搜索模式:"math\.tan"
- 你要查找的文本是
math.tan。 - 为什么要加反斜杠
\? 因为在grep的默认规则(正则表达式)中,点号.是一个通配符,代表“任意单个字符”。如果不加反斜杠,math.tan不仅能匹配到math.tan,还能匹配到math-tan、math_tan甚至mathttan。
加上\进行了转义(\.),意思是告诉grep:“我只要真正的、字面意义上的点号.”。
4. 搜索路径:/media/algo/data_1/everyday/2025_down
- 这是
grep开始施展长才的起始根目录。它会从这个绝对路径开始,带着-r参数一路向下狂搜。
5. 过滤器:--include="*.py"
- 精确限定文件类型。这个参数告诉
grep:“虽然我让你递归搜这个目录,但你只能去看后缀是.py的 Python 文件,别的文件(如.txt、.md、.json)直接跳过。” - 这不仅能极大地提高搜索速度(不用读无关的大文件),还能减少噪音,确保搜出来的都是 Python 源码。
💡 场景模拟
假设你的目录结构是这样的:
/media/algo/data_1/everyday/2025_down/
├── test.py <- 里面写了:y = math.tan(x)
├── readme.md <- 里面写了:We use math.tan here.
└── src/
└── utils.py <- 里面写了:v = math.tan(theta)
运行这条命令后,终端只会输出:
/media/algo/data_1/everyday/2025_down/test.py
/media/algo/data_1/everyday/2025_down/src/utils.py
(readme.md 虽然有这个词,但因为不是 .py 结尾,直接被 --include 过滤掉了;同时输出中也没有具体的代码行,只有干净的路径)。
你是在排查某些关于正切函数计算的代码,还是准备对这些文件进行批量的后续处理(比如用 xargs 传给下一个命令)?
好记性不如烂键盘---点滴、积累、进步!

浙公网安备 33010602011771号