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      设置起始行号
相关推荐
byte轻骑兵9 分钟前
【BlueZ 】用户态入口:main.c 核心函数与程序启动流程
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
Tisfy1 小时前
LeetCode 2058.找出临界点之间的最小和最大距离:遍历+遇到极值则更新(这种题谁空间复杂度不是O(1)啊)
linux·数据库·leetcode·链表·题解·模拟·遍历
liulilittle1 小时前
REALITY 代理隧道的有效检测方法: 被动、主动与确定性三层实证研究
linux·服务器·网络·网络协议·安全·网络安全·通信
邪修king1 小时前
Re:Linux 系统篇(十五):进程篇(四):进程切换深度解析 —— CPU 寄存器、进程上下文与切换全流程万字详解
linux·运维·服务器
高亦真2 小时前
今天是学习嵌入式的第33天
linux·学习·算法
cuijiecheng20182 小时前
Rocky Linux 安装 libltc、ltc-tools 和 ltcdump
linux
BlueAsia_Lab2 小时前
BQB 认证执行标准是什么?核心条款通俗解读
linux·运维·网络
小小、码农2 小时前
【网络】套接字(Socket)编程——TCP版
linux·服务器·网络·c++·网络协议·tcp/ip
邪修king2 小时前
Re:Linux 系统篇(十六):进程篇(五):O (1) 调度算法深度解析 —— 优先级数组、位图优化与活跃 / 过期双队列
linux·运维·算法
苏三福2 小时前
ubuntu 在文件管理系统中用sftp打开远程文件空白的问题解决
linux·运维·ubuntu