Linux nl 命令

Linux 命令大全 Linux 命令大全


一、nl 命令概述

nl 是 Linux 系统中一个简单但实用的命令行工具,全称为 "number lines"(行号)。它的主要功能是读取文件内容并为每一行添加行号,然后将结果输出到标准输出。

1.1 为什么需要 nl 命令

在日常开发或系统管理中,我们经常需要:

  • 快速查看代码或日志文件的特定行
  • 在讨论文件内容时方便引用具体行号
  • 对文件内容进行编号以便后续处理
  • 生成带行号的文档或报告

虽然 cat -n 也能实现类似功能,但 nl 提供了更丰富的行号控制选项,可以满足更复杂的需求。


二、基本语法与参数

2.1 基本命令格式

实例

nl [选项]... [文件]...

2.2 常用选项说明

选项 说明
-b 指定行号计算规则(后接样式)
-i 设置行号增量(默认为1)
-n 设置行号格式(左对齐/右对齐/不加0)
-s 设置行号与内容间的分隔符
-v 设置起始行号(默认为1)
-w 设置行号字段宽度(字符数)
-p 不在分页符处重置行号

2.3 行号计算规则(-b 选项)

-b 选项后可以接以下样式:

样式 说明
a 为所有行编号
t 只为非空行编号(默认值)
n 不编号
p正则表达式 只对匹配正则的行编号

三、实用示例演示

3.1 基础用法:为文件添加行号

实例

# 为 example.txt 所有非空行添加行号
nl example.txt

# 为所有行(包括空行)添加行号
nl -b a example.txt

3.2 自定义行号格式

实例

# 设置行号宽度为3,使用右对齐格式
nl -n rz -w 3 example.txt

# 使用"|"作为分隔符,行号左对齐
nl -s " | " -n ln example.txt

3.3 高级编号规则

实例

# 从10开始编号,增量为2
nl -v 10 -i 2 example.txt

# 只对包含"error"的行编号
nl -b perror example.log

3.4 处理多个文件

实例

# 为多个文件连续编号
nl file1.txt file2.txt

# 为每个文件单独编号
nl -p file1.txt file2.txt

四、与其他命令对比

4.1 nl vs cat -n

特性 nl cat -n
默认行为 只对非空行编号 对所有行编号
格式控制 丰富(对齐、宽度、分隔符等) 有限
编号规则 可自定义(正则匹配等) 固定
性能 稍慢 稍快

4.2 nl vs grep -n

grep -n 也会显示行号,但主要用途是搜索过滤,而行号只是附加信息。nl 则是专门为行号显示优化的工具。


五、实际应用场景

5.1 代码审查

实例

# 生成带行号的代码文件,方便讨论
nl -w 3 -n rz source.py > numbered_source.txt

5.2 日志分析

实例

# 只对包含"ERROR"的日志行编号
nl -b pERROR app.log | less

5.3 文档处理

实例

# 生成带行号的Markdown文档
nl -s ". " -w 2 -n rz README.md

六、注意事项与技巧

  1. 空行处理:默认情况下 nl 会跳过空行,使用 -b a 强制对所有行编号
  2. 大文件处理:对于超大文件,考虑结合 lesshead 使用
  3. 管道使用:可以接收标准输入,如 cat file | nl
  4. 格式一致性:建议在脚本中固定使用一组参数确保输出格式统一
  5. 性能考虑:对于简单行号需求,cat -n 可能更快

七、总结练习

7.1 练习题目

  1. 创建一个测试文件 test.txt 包含5行文字和2个空行
  2. 使用 nl 显示所有行号(包括空行)
  3. 设置行号从100开始,增量为5
  4. 使用"::"作为分隔符,行号宽度为4
  5. 将结果重定向到 numbered.txt

7.2 参考答案

实例

# 创建测试文件
echo -e "第一行\n\n第二行\n第三行\n\n第四行\n第五行" > test.txt

# 执行nl命令
nl -b a -v 100 -i 5 -s "::" -w 4 test.txt > numbered.txt

# 查看结果
cat numbered.txt

Linux 命令大全 Linux 命令大全