Linux 的 nl 命令

nl 是 Linux 系统中一个实用的命令行工具,用于为输入文本添加行号。它属于 GNU coreutils 工具集的一部分,默认安装在大多数 Linux 发行版中。

基本功能

nl 命令的主要功能是为文本文件或标准输入的内容添加行号。与简单的 cat -n 不同,nl 提供了更丰富的行号格式化选项。

基本语法

复制代码
nl [选项]... [文件]...

如果未指定文件或指定为 -,则从标准输入读取数据。

常用选项

  1. -b 样式:指定行号样式

    • a:为所有行编号(默认)
    • t:仅为非空行编号
    • n:不编号
  2. -v 起始值:设置行号的起始值(默认为1)

  3. -i 增量:设置行号增量(默认为1)

  4. -w 宽度:设置行号字段宽度(默认为6)

  5. -s 分隔符:设置行号与文本间的分隔符(默认为制表符)

  6. -n 格式:设置行号格式

    • ln:左对齐,无前导零
    • rn:右对齐,无前导零(默认)
    • rz:右对齐,有前导零

使用示例

基本使用

bash 复制代码
$ nl example.txt
     1  第一行内容
     2  第二行内容
     3  第三行内容

从管道读取

bash 复制代码
$ cat example.txt | nl

只对非空行编号

bash 复制代码
$ nl -b t example.txt

自定义行号格式

bash 复制代码
$ nl -n rz -w 3 -s ": " example.txt
001: 第一行内容
002: 第二行内容
003: 第三行内容

设置起始行号

bash 复制代码
$ nl -v 10 example.txt
    10  第一行内容
    11  第二行内容
    12  第三行内容

高级用法

nl 支持逻辑页面的概念,可以识别文件中的分节标记(默认是 \: 开头的行为分节标记)。可以使用 -h-f 选项分别设置头和脚注的编号样式。

bash 复制代码
$ nl -h a -f a -b t sectioned_file.txt

应用场景

  1. 日志文件分析:为日志文件添加行号便于引用特定行
  2. 代码审查:为代码片段添加行号便于讨论
  3. 文档处理:为文本添加结构化编号
  4. 脚本调试:为脚本输出添加行号便于定位问题

与其他命令对比

  1. cat -n:简单地为所有行添加行号,功能不如 nl 丰富
  2. pr -n:主要用于格式化打印,行号功能是附加的
  3. awk '{print NR,$0}':使用 awk 实现类似功能,但语法更复杂

nl 在需要精细控制行号格式时特别有用,是处理文本文件时的一个强大工具。

相关推荐
xiaoye-duck9 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
云老大-阿里云国际站代理商9 小时前
华为云国际站服务代理商:NAT网关怎么配?多台ECS共用公网IP要注意什么
服务器·华为云·云计算
zx_7414848110 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS10 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿10 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
wdfk_prog11 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞11 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
百万蹄蹄向前冲11 小时前
密码都对Node.js却连不上Linux数据库
linux·mysql
彧azz11 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
浅念-12 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql