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      设置起始行号
相关推荐
海阔天空任鸟飞~5 小时前
Linux 权限 777
linux·运维·服务器
Kina_C8 小时前
Linux iptables 防火墙原理与实操——从四表五链到 NAT 配置
linux·运维·服务器·iptables
wdfk_prog9 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
雷工笔记13 小时前
什么是Ubuntu?
linux·运维·ubuntu
jsons114 小时前
autofs挂载
linux·服务器·网络
liwulin050614 小时前
【ollama】自定义结构化输出
linux·前端·数据库·ollama
gs8014015 小时前
【实战】记一次 Linux 服务器入侵排查:grok-agent 后门木马深度剖析与彻底清理
linux·运维·服务器
时空无限15 小时前
vllm 大模型启动缓存相关环境变量 export
linux·缓存·vllm
Echo_cy_15 小时前
基于ZYNQ-7000的Ethernet驱动配置
linux·驱动开发·嵌入式硬件·fpga开发·ethernet·zynq
ShineWinsu16 小时前
对于Linux:模版方法类的解析以及socket、TcpSocket的封装
linux·c++·面试·socket·模板方法模式·封装·tcpsocket