linux nl 命令
nl 命令简介
nl (Number of Lines) 将指定的文件添加行号标注后写到标准输出。如果不指定文件或指定文件为"-" ,程序将从标准输入读取数据。
nl 语法:
nl [选项]... [文件]...
nl 参数选项
-
-p, --no-renumber 在逻辑页数切换时不将行号值复位
-
--help 显示此帮助信息并退出
-
--version 显示版本信息并退出
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