Linux 【03-nl命令超详细教程】

Linux nl 命令 超详细教程

nl = number lines ,作用:给文件内容加上行号 ,比 cat -n 功能更丰富,支持自定义行号样式、编号规则、分隔符等。

一、基础语法

bash 复制代码
nl [选项] 文件名
# 也可配合管道使用
cat 文件名 | nl

二、默认行为(无参数)

默认规则:

  1. 空白行不编号
  2. 行号右对齐,占 6 个字符宽度
  3. 行号和内容之间用 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 区别

  1. cat -n:强制所有行编号,无法跳过空行、无法改对齐/分隔符,功能简单。
  2. nl:高度可定制,空行开关、对齐、零填充、起始号、分隔符全都能改,专业行号工具。

简单总结:

  • 临时看行号 → cat -n
  • 需要定制行号样式、过滤空行 → 用 nl

六、速查备忘录

复制代码
-b a      所有行编号
-b t      仅非空行编号(默认)
-n ln     行号左对齐
-n rn     行号右对齐(默认)
-n rz     行号右对齐+补零
-s "xxx"  设置分隔符
-w N      设置行号宽度
-v N      设置起始行号
相关推荐
脚踏实地,坚持不懈!33 分钟前
Linux 内存回收机制:水位线、kswapd 与 Direct Reclaim
linux·jvm·算法
SKH.35 分钟前
Linux驱动-key、中断
linux·运维·服务器
小龙报37 分钟前
【零到全栈】从扩展名到终端实操,打通 Linux 基础
linux·ubuntu·云原生·职场和发展·创业创新·学习方法·程序员创富
星恒随风1 小时前
Linux进程间通信(一):从匿名管道、命名管道到进程池,深入理解Pipe、FIFO与文件描述符
linux·运维·笔记·学习·状态模式
wuminyu1 小时前
ZGC染色指针在虚拟线程stackChunkOop上的并发屏障全景分析
java·linux·c语言·jvm·c++
硅基手札2 小时前
【I2C 技术系列 11】I2C Linux 驱动框架
linux·驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
imDwAaY2 小时前
程序里的地址是真实内存地址吗?从虚拟内存到地址转换
java·linux·服务器
INGNIGHT2 小时前
486. 预测赢家(博弈dp/区间dp)
linux·c++
2402_882893862 小时前
Linux 进程概念详解(下)—— 进程调度、环境变量与虚拟地址空间
linux·进程·虚拟地址空间
虚无的纽扣2 小时前
【Linux】揭开文件系统神秘的面纱:第四讲:可执行文件的组装车间
linux·运维·服务器