文本处理77 条

nl 加行号输出

给文件加行号:默认只编号非空行,-ba 全部行、-w 控制宽度、-s 控制分隔符,比 cat -n 更可调。

Linux 运维命令速查系统更新于 2026-10-13

nl 加行号

nl 是 GNU coreutils 里的行号工具,把输入按行加上序号后输出。它比 cat -n 灵活得多:默认只给非空行编号,可以用 -ba 让所有行都参与,还能调序号宽度、分隔符、起始值与步长。在给配置文件片段编号、在工单里引用具体行、把日志按行定位这类场景里,它比肉眼数行可靠得多。

基本信息

适用平台Linux(GNU coreutils);macOS 自带 BSD 版 nl,选项略少
语法nl [选项] [文件],缺省从标准输入读取
默认行为只给非空行编号,等价于 -b t
权限要求普通用户,只读文件内容

典型使用场景

  • 给配置片段加行号,方便在工单或群里精确定位到某一行
  • 把 sed 摘出来的片段重新编号后再展示,阅读更顺
  • 统计文件里有多少条有效内容行(非空行计数)
  • 生成带序号的清单数据,供下游脚本按行号引用
  • 临时查看某段输出时统一用冒号分隔,配合编辑器跳转习惯

常用示例

常用示例
nl -ba app.conf                  # 所有行都编号,包括空行
nl -w2 -s': ' app.conf           # 序号宽度 2,用冒号和空格分隔
nl -bt app.conf                  # 只编非空行(默认行为,显式写出更好读)
sed -n '10,20p' app.conf | nl -ba   # 摘出 10 到 20 行后重新编号
nl -v 100 -i 10 app.conf         # 从 100 起、每行加 10
grep -c . app.conf               # 只想知道有多少非空行时更直接

选项逐项读法

选项作用使用注意
-b a所有行都编号脚本按行号定位时必加,否则与真实行号错位
-b t只编非空行,缺省值数行数场景反而是优点
-b p正则只给匹配正则的行编号正则要用基础正则语法,注意转义
-w设定序号占位宽度输出给终端看时配 -w2 更整齐
-s设定序号与内容的分隔符默认是制表符,贴到聊天窗口会错乱
-v 与 -i起始值、每次递增的步长生成数据集时替代脚本自增变量
nl 编的是「输出流里的物理行」,不是视觉行:终端里长行折行不会产生新行号,按屏幕上的行数去核对一定会数错。
只要匹配行的行号时用 grep -n,比 nl 管道再过滤更省事;nl 更适合先拿到内容、再统一编号展示的流程。

易错点

  • 忘了默认只编非空行,脚本按行号取行时整体错位,排查时先显式加 -ba
  • 默认分隔符是制表符,贴进即时通讯或邮件后对齐全乱,展示前用 -s': ' 换成可见分隔符
  • 把带 ANSI 颜色的输出交给 nl,序号会插进转义序列中间,先去掉颜色再编号
  • 用 -b p正则 时正则语法与常用工具不同,写错会静默不编号,验收时先看前几行

数据来源与参考

  • man 1 nl(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌