Linux nl 命令
一、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
nl example.txt
# 为所有行(包括空行)添加行号
nl -b a example.txt
3.2 自定义行号格式
实例
# 设置行号宽度为3,使用右对齐格式
nl -n rz -w 3 example.txt
# 使用"|"作为分隔符,行号左对齐
nl -s " | " -n ln example.txt
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
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
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
nl -w 3 -n rz source.py > numbered_source.txt
5.2 日志分析
实例
# 只对包含"ERROR"的日志行编号
nl -b pERROR app.log | less
nl -b pERROR app.log | less
5.3 文档处理
实例
# 生成带行号的Markdown文档
nl -s ". " -w 2 -n rz README.md
nl -s ". " -w 2 -n rz README.md
六、注意事项与技巧
- 空行处理:默认情况下
nl
会跳过空行,使用-b a
强制对所有行编号 - 大文件处理:对于超大文件,考虑结合
less
或head
使用 - 管道使用:可以接收标准输入,如
cat file | nl
- 格式一致性:建议在脚本中固定使用一组参数确保输出格式统一
- 性能考虑:对于简单行号需求,
cat -n
可能更快
七、总结练习
7.1 练习题目
- 创建一个测试文件
test.txt
包含5行文字和2个空行 - 使用
nl
显示所有行号(包括空行) - 设置行号从100开始,增量为5
- 使用"::"作为分隔符,行号宽度为4
- 将结果重定向到
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
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
点我分享笔记