cat -n 为所有行(含空行)编号,cat -b 仅对非空行编号;前者适合严格对齐原始位置,后者更贴近“有意义的行”,避免空行干扰行号定位。

cat -n 和 cat -b 的区别必须分清
直接用 cat -n 会为所有行(包括空行)编号,而 cat -b 只给非空行编号。很多人误以为 -n 是“标准”做法,结果在处理日志或配置文件时,发现空行也占了行号,后续用 sed -n '5p' 提取第 5 行却拿到空行,实际内容偏移了。
-
cat -n file.txt:每行都有编号,适合需要严格对齐原始位置的场景(比如对照编辑器里显示的行号) -
cat -b file.txt:跳过空行编号,更适合阅读——尤其当文件里有大量空行时,行号更贴近“有意义的行” - 注意:
cat一次性输出全部内容,不适用于大文件(如 >10MB),容易卡住终端或刷屏
nl 命令比 cat 更可控,但默认行为容易误导
nl 默认只给非空行编号(等价于 cat -b),但它支持更细粒度控制,比如是否对注释行编号、行号对齐方式等。新手常直接敲 nl file.txt 就走,结果发现开头几行没编号——其实是被默认的空白行过滤规则吃了。
- 要包含空行:用
nl -ba file.txt(-ba中的a表示 all lines) - 只编号非空行 + 注释行(以 # 开头):
nl -ba -w3 file.txt(-w3让行号占 3 位宽,对齐更整齐) -
nl不支持管道输入后仍保留原始行号语义(比如grep "error" log | nl编的是过滤后的新行号,不是原文件位置)
less -N 是查看大文件时最实用的选择
用 less -N 打开文件,行号实时渲染、可翻页、支持搜索(/pattern)、跳转(:123 直接跳到第 123 行),而且不会把整个文件加载进内存。很多用户不知道 -N 是大写,输成 less -n 就没反应——那是另一个无关选项。
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
- 启动即带行号:
less -N /var/log/syslog - 进入后临时开启/关闭行号:
:set number或:set nonumber(仅当前会话有效) - 退出用
q,别按 Ctrl+C,否则可能残留后台进程 - 如果文件是二进制或含非法字符,
less -N可能显示乱码;此时先用file filename确认编码类型
grep -n 不是“查看文件”,而是“定位内容”
grep -n 的核心作用不是展示全文,而是快速找到关键词在哪几行。它输出格式固定为 行号:匹配内容,中间冒号不可配置。有人拿它当 cat -n 替代品,结果发现只看到匹配行,漏掉上下文。
- 查错误并带行号:
grep -n "Permission denied" /var/log/auth.log - 想同时看匹配行前后 2 行?加
-A 2 -B 2,但注意:行号只标在匹配行上,上下文不编号 - 正则复杂时,
grep -nE比grep -n更可靠(比如grep -nE "^(Error|WARN)") - 如果文件路径含空格,务必用引号包裹:
grep -n "foo" "my file.txt",否则 shell 会拆成两个参数报错
行号看似简单,但不同命令对“空行”“编码”“管道上下文”的处理逻辑完全不同。选错命令不是看不到行号,而是看到的行号和你心里想的“第几行”根本不是一回事。










