概述
Linux 中的nl命令是带行号打印文件内容的工具,比基础的cat -n功能更灵活,支持对行号格式、编号规则(如是否跳过空行)进行精细化配置,是日常查看文件、排版输出的常用命令。
资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a
一、基本语法
nl[选项][文件1][文件2]...无文件参数时,默认读取标准输入(可配合管道|使用)。
二、核心功能与默认行为
- 默认只为非空行添加行号,空行不编号(区别于
cat -n,后者对所有行包括空行编号); - 行号默认居右,左侧补空格,与文件内容之间有制表符分隔;
- 支持多文件拼接打印,行号连续递增。
简单示例
# 打印 test.txt 内容并为非空行加行号nltest.txt若test.txt内容为:
hello linux nl command test line输出结果:
1 hello linux 2 nl command 3 test line三、常用选项(重点)
nl的优势在于通过选项自定义行号规则,以下是高频实用选项,可组合使用:
| 选项 | 作用 | 示例 |
|---|---|---|
-b a | 为所有行编号(包括空行),等效cat -n | nl -b a test.txt |
-b t | 仅为非空行编号(默认行为),可省略 | nl -b t test.txt |
-n ln | 行号左对齐,无补空格 | nl -n ln test.txt |
-n rn | 行号右对齐(默认),左侧补空格 | nl -n rn test.txt |
-n rz | 行号右对齐,左侧补0填充(固定位数) | nl -n rz test.txt |
-w N | 指定行号的宽度(默认6位),N为数字 | nl -w 3 test.txt(行号占3位) |
-s 符号 | 指定行号与内容之间的分隔符(默认制表符\t) | `nl -s " |
-v N | 指定行号的起始值(默认从1开始) | nl -v 10 test.txt(从10开始编号) |
-i N | 指定行号的递增步长(默认1) | nl -i 2 test.txt(行号+2递增) |
四、经典组合示例
结合选项实现精细化行号打印,覆盖日常大部分使用场景:
1. 所有行编号+行号补0+宽度3位
nl-b a -n rz -w3test.txt输出(空行也编号,行号3位补0):
001 hello linux 002 nl command 003 004 test line2. 行号左对齐+分隔符为|+从5开始编号
nl-nln-s"|"-v5test.txt输出:
5|hello linux 6|nl command 7|test line3. 配合管道使用(过滤后加行号)
# 查看/etc/passwd中含root的行,并用nl加行号greproot /etc/passwd|nl-b a -n rz -w24. 多文件连续编号打印
# 为file1.txt和file2.txt连续加行号,所有行编号nl-b a file1.txt file2.txt五、与cat -n/cat -b的区别
nl是专门的行号打印工具,cat的行号功能是附属特性,三者核心差异如下,按需选择:
| 命令 | 编号规则 | 行号对齐 | 自定义性 | 适用场景 |
|---|---|---|---|---|
nl(默认) | 仅非空行 | 右对齐(6位) | 高(宽度、分隔符、步长等) | 需精细化配置行号 |
cat -n | 所有行(含空行) | 右对齐(默认) | 低(无自定义选项) | 快速所有行加行号 |
cat -b | 仅非空行 | 右对齐(默认) | 低(无自定义选项) | 快速非空行加行号 |
六、注意事项
- 若文件中有换行符异常(如Windows的
\r\n),nl仍正常编号,可先用dos2unix转换; - 行号宽度
-w N若小于行号实际位数,会自动按实际位数显示,不会截断; - 分隔符
-s后若跟特殊符号(如\t、\n),需用单/双引号包裹(如-s "\t-")。
总结
nl的核心价值是灵活的行号定制,日常使用中:
- 快速需求用
cat -n/cat -b即可; - 需补0、自定义分隔符/起始号/步长、固定行号宽度时,优先用
nl。
最常用的高频组合:
- 所有行编号+补0:
nl -b a -n rz -w 3 文件名 - 管道过滤后精细化加行号:
命令 | nl -b a -s " " 文件名