nl 是 Linux 系统中一个实用的命令行工具,用于为输入文本添加行号。它属于 GNU coreutils 工具集的一部分,默认安装在大多数 Linux 发行版中。
基本功能
nl 命令的主要功能是为文本文件或标准输入的内容添加行号。与简单的 cat -n 不同,nl 提供了更丰富的行号格式化选项。
基本语法
nl [选项]... [文件]...
如果未指定文件或指定为 -,则从标准输入读取数据。
常用选项
-
-b 样式:指定行号样式
a:为所有行编号(默认)t:仅为非空行编号n:不编号
-
-v 起始值:设置行号的起始值(默认为1)
-
-i 增量:设置行号增量(默认为1)
-
-w 宽度:设置行号字段宽度(默认为6)
-
-s 分隔符:设置行号与文本间的分隔符(默认为制表符)
-
-n 格式:设置行号格式
ln:左对齐,无前导零rn:右对齐,无前导零(默认)rz:右对齐,有前导零
使用示例
基本使用
bash
$ nl example.txt
1 第一行内容
2 第二行内容
3 第三行内容
从管道读取
bash
$ cat example.txt | nl
只对非空行编号
bash
$ nl -b t example.txt
自定义行号格式
bash
$ nl -n rz -w 3 -s ": " example.txt
001: 第一行内容
002: 第二行内容
003: 第三行内容
设置起始行号
bash
$ nl -v 10 example.txt
10 第一行内容
11 第二行内容
12 第三行内容
高级用法
nl 支持逻辑页面的概念,可以识别文件中的分节标记(默认是 \: 开头的行为分节标记)。可以使用 -h 和 -f 选项分别设置头和脚注的编号样式。
bash
$ nl -h a -f a -b t sectioned_file.txt
应用场景
- 日志文件分析:为日志文件添加行号便于引用特定行
- 代码审查:为代码片段添加行号便于讨论
- 文档处理:为文本添加结构化编号
- 脚本调试:为脚本输出添加行号便于定位问题
与其他命令对比
cat -n:简单地为所有行添加行号,功能不如nl丰富pr -n:主要用于格式化打印,行号功能是附加的awk '{print NR,$0}':使用 awk 实现类似功能,但语法更复杂
nl 在需要精细控制行号格式时特别有用,是处理文本文件时的一个强大工具。