在Linux中使用grep显示匹配行的行号需加-n选项,格式为“行号:匹配内容”;可与-i、-r、--color等联用;仅提取行号可用cut或awk;行号始终对应文件原始物理行号。

在 Linux 中使用 grep 显示匹配行的行号,只需加上 -n 选项即可。
基础用法:显示行号 + 匹配内容
-n(number)选项会让 grep 在每行匹配结果前输出该行在文件中的行号,格式为 行号:匹配内容。
- 命令示例:
grep -n "error" /var/log/syslog - 输出类似:
127:error occurred while loading module
结合其他常用选项增强实用性
行号功能常与其他选项联用,提升查找效率:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
-i:忽略大小写,如grep -ni "warning" app.log -
-r:递归搜索目录,grep -rn "TODO" ./src/会显示每个匹配文件的路径+行号 -
--color=always:高亮匹配关键词,行号仍清晰可见,如grep -n --color=always "fail" test.log
只显示行号(不显示匹配内容)
如果只需要行号本身(比如用于后续脚本处理),可配合 -o 和 cut,但更直接的方式是用 awk 或提取 -n 输出的冒号前部分:
- 简单提取行号:
grep -n "pattern" file.txt | cut -d: -f1 - 或用
awk:grep -n "pattern" file.txt | awk -F: '{print $1}'
注意点:行号基于原始文件,不受其他选项影响
-n 统计的是目标文件中实际的物理行号,即使用了 -v(反向匹配)或 -A/-B(上下文),行号依然对应原始位置。
- 例如:
grep -n -A 1 "panic" kernel.log中的行号仍是panic所在行的真实编号,后面显示的上下文行不额外编号 - 空行、注释行都计入行号,
grep不跳过任何行










