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      设置起始行号
相关推荐
HideF2 小时前
Linux sudo
linux
FlightYe2 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎3 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
牛马鸡niumasi4 小时前
【Linux】C语言文件操作
linux
say_fall4 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii5 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
AI+程序员在路上5 小时前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能
默|笙5 小时前
【Linux网络】传输层协议TCP(1)---TCP报文介绍
linux·网络·tcp/ip
相思难忘成疾5 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
用户4107192013256 小时前
用 systemd 从零做一个系统健康巡检服务:脚本、沙箱与磁盘满排查实战
linux·ubuntu