Linux nl 命令 超详细教程
nl = number lines ,作用:给文件内容加上行号 ,比 cat -n 功能更丰富,支持自定义行号样式、编号规则、分隔符等。
一、基础语法
bash
nl [选项] 文件名
# 也可配合管道使用
cat 文件名 | nl
二、默认行为(无参数)
默认规则:
- 空白行不编号
- 行号右对齐,占 6 个字符宽度
- 行号和内容之间用 Tab 分隔
示例:
bash
# 新建测试文件
cat > test.txt << EOF
第一行
第二行
第三行
EOF
# 直接 nl
nl test.txt
输出:
1 第一行
2 第二行
3 第三行
空行无行号。
三、常用核心选项(分类讲解)
1. 控制「空白行是否编号」-b(最常用)
格式:-b 模式
| 模式 | 说明 |
|---|---|
a |
所有行都编号(包括空行) |
t |
仅非空行编号(默认) |
n |
所有行都不编号 |
pRE |
只对匹配正则 RE 的行编号 |
示例
bash
# 所有行(含空行)都编号
nl -b a test.txt
# 只给非空行编号(默认效果)
nl -b t test.txt
# 全行不显示行号,只输出内容
nl -b n test.txt
2. 控制「行号对齐方式」-l 不常用,重点 -n
格式:-n 格式,控制行号本身的显示样式
| 格式 | 说明 |
|---|---|
ln |
行号左对齐,不补前导零 |
rn |
行号右对齐 ,不补前导零(默认) |
rz |
行号右对齐,补前导零(零填充) |
示例
bash
# 行号左对齐
nl -n ln test.txt
# 行号右对齐(默认)
nl -n rn test.txt
# 行号右对齐 + 补 0(零填充)
nl -n rz test.txt
3. 自定义「行号与内容的分隔符」-s
格式:-s "分隔符"
默认分隔符是 Tab 制表符,可改成空格、符号等。
示例
bash
# 行号和内容之间用 单个空格 分隔
nl -s " " test.txt
# 用 冒号 分隔
nl -s ":" test.txt
# 组合:全行编号 + 空格分隔
nl -b a -s " " test.txt
4. 设置「行号占用宽度」-w
格式:-w 数字,指定行号列总字符宽度 ,默认 6。
示例
bash
# 行号占 3 个字符宽度
nl -w 3 test.txt
# 宽度4 + 零填充
nl -w 4 -n rz test.txt
5. 设置「起始行号」-v
格式:-v 数字,指定第一行的起始编号 ,默认从 1 开始。
示例
bash
# 行号从 100 开始编号
nl -v 100 test.txt
# 从 5 开始,所有行编号
nl -v 5 -b a test.txt
6. 逻辑分页/分组编号 --header --body --footer(高级用法)
nl 支持把文件分为 页眉(header)、正文(body)、页脚(footer) 三部分,分别控制编号规则,用分页符分隔:
- 分页符:
\+ 回车(输入\然后回车)
参数简写:
-ha:页眉所有行编号-hb:正文所有行编号(默认正文规则)-hf:页脚所有行编号
示例(分页编号)
bash
# 页眉、正文、页脚 全部行都编号
nl -ha -hb -hf test.txt
四、高频组合命令(工作常用)
1. 全行编号(含空行)+ 空格分隔
bash
nl -b a -s " " test.txt
2. 行号从零填充、宽度4、从1开始
bash
nl -w 4 -n rz test.txt
3. 行号左对齐 + 全量编号
bash
nl -b a -n ln test.txt
4. 行号从 10 开始,所有行编号
bash
nl -v 10 -b a test.txt
5. 管道结合使用(查看命令输出并加行号)
bash
# 查看目录并加行号
ls -l | nl -b a
# 查看配置文件并编号
cat /etc/profile | nl
五、nl vs cat -n 区别
cat -n:强制所有行编号,无法跳过空行、无法改对齐/分隔符,功能简单。nl:高度可定制,空行开关、对齐、零填充、起始号、分隔符全都能改,专业行号工具。
简单总结:
- 临时看行号 →
cat -n - 需要定制行号样式、过滤空行 → 用
nl
六、速查备忘录
-b a 所有行编号
-b t 仅非空行编号(默认)
-n ln 行号左对齐
-n rn 行号右对齐(默认)
-n rz 行号右对齐+补零
-s "xxx" 设置分隔符
-w N 设置行号宽度
-v N 设置起始行号