linux nl 命令

Linux 命令大全

nl 命令简介

nl (Number of Lines) 将指定的文件添加行号标注后写到标准输出。如果不指定文件或指定文件为"-" ,程序将从标准输入读取数据。

nl 语法:

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

nl 参数选项

nl -b 可用的样式如下:

  •   a    对所有行编号

  •   t    对非空行编号

  •   n    不编行号

  •   pBRE    只对符合正则表达式BRE 的行编号

nl -n 格式化样式如下:

在做 nl 命令 之前,先准备一些测试的文件数据,我们通过 cat 命令查看一下文件的内容:

[root@iz8vbbxoyfcgyzkxcspg04z test]# cat t1.txt
HTML

CSS
JavaScript
Vue.js
AJAX
jQuery
Python
Java

linux

我们发现文件的内容没有行号 这个时候 用我们的 nl 命令就可以轻松解决这个问题

nl 显示行号

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl t1.txt 
     1	HTML
       
     2	CSS
     3	JavaScript
     4	Vue.js
     5	AJAX
     6	jQuery
     7	Python
     8	Java
       
     9	linux

nl -n 显示行号,指定对齐方式

用法说明:指定对齐方式必须要 带 -n 这个参数,对齐方式如下:

  ln    左对齐,空格不用0 填充
  rn     右对齐,空格不用0 填充
  rz     右对齐,空格用0 填充

nl -n ln 左对齐

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -n ln t1.txt 
1     	HTML
       
2     	CSS
3     	JavaScript
4     	Vue.js
5     	AJAX
6     	jQuery
7     	Python
8     	Java
       
9     	linux

nl -n rn 右对齐

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -n rn t1.txt 
     1	HTML
       
     2	CSS
     3	JavaScript
     4	Vue.js
     5	AJAX
     6	jQuery
     7	Python
     8	Java
       
     9	linux

nl -n rz 右对齐,空格用0 填充

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -n rz t1.txt 
000001	HTML
       
000002	CSS
000003	JavaScript
000004	Vue.js
000005	AJAX
000006	jQuery
000007	Python
000008	Java
       
000009	linux

nl -b 指定行号指定的方式,主要有三种:

  •   a    对所有行编号

  •   t    对非空行编号

  •   n    不编行号

nl -b a  对所有行编号

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -b a t2.txt
     1	baidu.com
     2	
     3	
     4	xinbiancheng.cn
     5	
     6	google.cn

nl -b t  对非空行编号

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -b t t2.txt
     1	baidu.com
       
       
     2	xinbiancheng.cn
       
     3	google.cn

nl -b n 不编行号

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -b n t2.txt 
       baidu.com
       
       
       xinbiancheng.cn
       
       google.cn

nl -d --section-delimiter=CC    使用指定的CC 分割逻辑页数

目前通过百度没有查找到-d的用法,以我个人的理解分享给大家,准备 t5.txt 数据如下:

[root@iz8vbbxoyfcgyzkxcspg04z test]# cat t5.txt
a
b
c
d
e
f

现在想在d这个地方做一个分割,命令如下:

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -d 'd' t5.txt
     1	a
     2	b
     3	c
     4	d
     5	e
     6	f

我们发现在d这个地方没有进行分割,是什么原因呢?我个人认为一个字符很难进行分割,出错的概率比较大。一个文章中的内容26个字母都可能会出现。

系统就不知道哪个字符是真正的分割。在linux中经过测试发现2个以上的字符可以分割成功,期望我的猜想是对的,修改一下文件的内容如下:

[root@iz8vbbxoyfcgyzkxcspg04z test]# cat t5.txt
a
b
c
dd
e
f

把1个d现在修改成2个dd

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -d 'dd' t5.txt
     1	a
     2	b
     3	c

       e
       f

哈哈,猜想成功。咦?e 后面的没有行号?这个能解决吗?当然可以解决。还有参数没有讲呢 -f 可以完美解决这个问题。

nl -f 可以补齐分割之后没有行号的问题

指定行号有3种方式:

  •   a    对所有行编号

  •   t    对非空行编号

  •   n    不编行号

参数 -f a 两个配合就可以把分割之后的行号给补上。

测试代码如下:

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -d 'dd' -f a t5.txt
     1	a
     2	b
     3	c

     4	e
     5	f

nl -i 行号增加的步长

如个理解呢?默认情况下行号为1,2,3....... 能否变成两个数相隔不为1呢?变成1,3,5,7......

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -i 2 t5.txt
     1	a
     3	b
     5	c
     7	dd
     9	e
    11	f

nl -l 设置数值为多少的若干空行被视作一行

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -b a t2.txt 
     1	baidu.com
     2	
     3	
     4	xinbiancheng.cn
     5	
     6	google.cn
[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -b a -l 2 t2.txt 
     1	baidu.com
       
     2	
     3	xinbiancheng.cn
       
     4	google.cn

nl -s 行号后添加字符串

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -s ' xinbiancheng ' t5.txt
     1 xinbiancheng a
     2 xinbiancheng b
     3 xinbiancheng c
     4 xinbiancheng dd
     5 xinbiancheng e
     6 xinbiancheng f

nl -v 行号的起始号,默认是1

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -v 3 t2.txt
     3	baidu.com
       
       
     4	xinbiancheng.cn
       
     5	google.cn

nl -w 可以改变行号的宽度,默认行号的宽度是6位

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -n rz t2.txt 
000001	baidu.com
       
       
000002	xinbiancheng.cn
       
000003	google.cn

现在想行号变成3位数字,可以使用 -w 参数来解决这个问题。

[root@iz8vbbxoyfcgyzkxcspg04z test]# nl -n rz -w 3 t2.txt 
001	baidu.com
    
    
002	xinbiancheng.cn
    
003	google.cn

Linux 命令大全