使用 grep -n 可同时输出匹配内容及原始文件中的物理行号,格式为“行号:匹配行”或“文件名:行号:匹配行”,支持单文件、多文件及递归搜索,并常与 -i、-e、--color 等选项组合提升实用性。

用 grep -n 就可以同时输出匹配内容和行号。
基础用法:-n 参数显示行号
-n 是 grep 最常用的选项之一,它会在每条匹配结果前加上对应文件中的行号(从 1 开始计数),格式为 行号:匹配行内容。
- 单个文件:
grep -n "pattern" filename - 多个文件:
grep -n "pattern" file1 file2,会自动在每行前加文件名: - 递归搜索:
grep -rn "pattern" dir/(-r表示递归,-n显示行号)
配合其他常用选项提升实用性
单独用 -n 已经很实用,但常和几个选项组合使用:
-
grep -ni "error" log.txt:忽略大小写(-i)并显示行号 -
grep -n "^$" file.txt:匹配空行,并标出行号,方便定位空白位置 -
grep -nE "^(def|class) " *.py:用扩展正则找 Python 中的函数或类定义行
注意行号是“原始文件中的物理行号”
这个行号指该行在文件里从上到下第几行,不是过滤后结果的序号。即使用了 -v(反向匹配)或 --include,行号仍对应原始位置,所以定位修改非常可靠。
如果某行被多次匹配(比如正则中有重复捕获),grep -n 默认只输出一次该行 + 行号,不会为每个匹配位置单独标号;如需逐个位置,得用 grep -o -n(但此时输出的是“匹配片段 + 行号”,不是整行)。
想让输出更清晰?加点颜色和文件名提示
终端支持颜色时,grep --color=always 会让匹配关键词高亮;搭配 -n 后,行号和高亮内容一起显示,更易识别。
- 推荐别名:
alias gn='grep -n --color=always',之后直接用gn "todo" *.js - 避免无文件名干扰:搜索单个文件时,
grep -n pattern file不带文件名前缀;但搜多个文件时,自动加前缀——这是 grep 的默认行为,无需额外处理











