0018. shell命令--nl
目录
18. shell命令--nl
功能说明
语法格式
选项说明
实践操作
注意事项
18. shell命令--nl
功能说明
nl 是 Linux 中的一个实用程序,用于给文件的每一行加上行号。它通常用于查看或打印带有行号的文件内容。nl命令来自英文词组“Number of lines”的缩写,其功能是用于显示文件内容及行号,使用nl命令会有类似于“cat -n 文件名”的效果,除此之外还可以对于显示的行号格式进行深度定制。
语法格式
nl [选项] [文件...]
SYNOPSIS
nl [OPTION]... [FILE]...
选项说明
- -b:指定行号指定的方式。
- t:只对非空行添加行号。
- a:对所有行(包括空行)添加行号。
- n:对没有空字符的行添加行号(默认)。
- p:对逻辑页(使用 formfeed 字符分隔的行)的第一行添加行号。
- s:只对每个逻辑页的第一行添加行号(与 -p 类似,但只打印行号,不打印内容)。
- j:对每个逻辑页的所有行添加行号(与 -p 类似,但打印所有行)。
- -d:指定分隔符,用于在行号和内容之间插入。默认为制表符。
- -f:指定行号的格式。
- ln:左对齐,没有前导零(默认)。
- rn:右对齐,没有前导零。
- rz:右对齐,有前导零。
- lz:左对齐,有前导零。
- -i:指定行号的增量。例如,-i 2 意味着每两行增加一次行号。
- -l:指定最大的行数(当处理大文件时有用)。
- -n:指定行号的格式。
- ln:左对齐,没有前导零(默认)。
- rn:右对齐,没有前导零。
- rz:右对齐,有前导零。
- lz:左对齐,有前导零。
- wn:行号前没有空格,且行号字段宽度为 n 个字符。
- bn:在行号前后都加上空格,且行号字段宽度为 n 个字符。
- -p:逻辑页(与 -b p 类似)。
- -s:在行号和内容之间插入指定的字符串(与 -d 类似,但 -s 允许更长的字符串)。
- -v:设置开始行号。例如,-v 10 意味着从 10 开始编号。
- -w:设置行号字段的宽度。
实践操作
1. 显示指定文件内容及行号信息
nl /root/.bashrc
2. 显示指定文件内容及行号信息,空行也加上行号
nl -b a /root/.bashrc
3. 空行也算一行,并且行号前面自动补0,统一输出格式后显示指定文件内容及行号信息
nl -b a -n rz /root/.bashrc
4. 设置行号字段的宽度为 N 个字符,并右对齐
nl -n rz -w 2 /root/.bashrc
nl -n rz -w 5 /root/.bashrc
5. 为非空行添加行号,并设置开始行号为 100
nl -b t -v 100 /root/.bashrc
6. 使用自定义的分隔符(如顿号)添加行号
nl -s '、' /root/.bashrc
7. 与其它符号或命令结合使用
nl /etc/ssh/sshd_config | less
grep "$PS1" /etc/bashrc
nl /etc/bashrc | grep "$PS1"
命令示例:1. 显示指定文件内容及行号信息
nl /root/.bashrc
输出结果:
[root@MineGi ~]# nl /root/.bashrc
1 # .bashrc
2 # User specific aliases and functions
3 alias rm='rm -i'
4 alias cp='cp -i'
5 alias mv='mv -i'
6 # Source global definitions
7 if [ -f /etc/bashrc ]; then
8 . /etc/bashrc
9 fi
[root@MineGi ~]#
命令示例:2. 显示指定文件内容及行号信息,空行也加上行号
nl -b a /root/.bashrc
输出结果:
[root@MineGi ~]# nl -b a /root/.bashrc
1 # .bashrc
2
3 # User specific aliases and functions
4
5 alias rm='rm -i'
6 alias cp='cp -i'
7 alias mv='mv -i'
8
9 # Source global definitions
10 if [ -f /etc/bashrc ]; then
11 . /etc/bashrc
12 fi
[root@MineGi ~]#
命令示例:3. 空行也算一行,并且行号前面自动补0,统一输出格式后显示指定文件内容及行号信息
nl -b a -n rz /root/.bashrc
输出结果:
[root@MineGi ~]# nl -b a -n rz /root/.bashrc
000001 # .bashrc
000002
000003 # User specific aliases and functions
000004
000005 alias rm='rm -i'
000006 alias cp='cp -i'
000007 alias mv='mv -i'
000008
000009 # Source global definitions
000010 if [ -f /etc/bashrc ]; then
000011 . /etc/bashrc
000012 fi
[root@MineGi ~]#
命令示例:4. 设置行号字段的宽度为 N 个字符,并右对齐
nl -n rz -w 2 /root/.bashrc
nl -n rz -w 5 /root/.bashrc
输出结果:
[root@MineGi ~]# nl -n rz -w 2 /root/.bashrc
01 # .bashrc
02 # User specific aliases and functions
03 alias rm='rm -i'
04 alias cp='cp -i'
05 alias mv='mv -i'
06 # Source global definitions
07 if [ -f /etc/bashrc ]; then
08 . /etc/bashrc
09 fi
[root@MineGi ~]# nl -n rz -w 5 /root/.bashrc
00001 # .bashrc
00002 # User specific aliases and functions
00003 alias rm='rm -i'
00004 alias cp='cp -i'
00005 alias mv='mv -i'
00006 # Source global definitions
00007 if [ -f /etc/bashrc ]; then
00008 . /etc/bashrc
00009 fi
[root@MineGi ~]#
命令示例:5. 为非空行添加行号,并设置开始行号为 100
nl -b t -v 100 /root/.bashrc
输出结果:
[root@MineGi ~]# nl -b t -v 100 /root/.bashrc
100 # .bashrc
101 # User specific aliases and functions
102 alias rm='rm -i'
103 alias cp='cp -i'
104 alias mv='mv -i'
105 # Source global definitions
106 if [ -f /etc/bashrc ]; then
107 . /etc/bashrc
108 fi
[root@MineGi ~]#
命令示例:6. 使用自定义的分隔符(如顿号)添加行号
nl -s '、' /root/.bashrc
输出结果:
[root@MineGi ~]# nl -s '、' /root/.bashrc
1、# .bashrc
2、# User specific aliases and functions
3、alias rm='rm -i'
4、alias cp='cp -i'
5、alias mv='mv -i'
6、# Source global definitions
7、if [ -f /etc/bashrc ]; then
8、 . /etc/bashrc
9、fi
[root@MineGi ~]#
命令示例:7. 与其它符号或命令结合使用
nl /etc/ssh/sshd_config | less
grep -n "\$PS1" /etc/bashrc
nl /etc/bashrc | grep "$\PS1"
输出结果:
[root@MineGi ~]# nl /etc/ssh/sshd_config | less
[root@MineGi ~]# grep -n "\$PS1" /etc/bashrc
12:if [ "$PS1" ]; then
41: #[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
42: [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\\$ "
46: # if [ "$PS1" ]; then
82: if [ "$PS1" ]; then
[root@MineGi ~]# nl /etc/bashrc | grep "$\PS1"
9 if [ "$PS1" ]; then
38 #[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
39 [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\\$ "
43 # if [ "$PS1" ]; then
76 if [ "$PS1" ]; then
[root@MineGi ~]#
注意事项
- 在使用 nl 命令时,要注意文件的大小和行数。如果文件非常大,包含数百万或数千万行,那么 nl 命令可能会消耗大量的内存和 CPU 时间。在这种情况下,你可以考虑使用 -l 选项来限制 nl 命令处理的行数。
- 另外,虽然 nl 命令可以很方便地为文件添加行号,但如果你需要频繁地对文件进行这种操作,或者需要在多个文件中保持一致的行号格式,那么你可能需要考虑使用更强大的文本处理工具或编程语言来实现这些功能。
nl 是 Linux 中一个非常实用的命令,它可以帮助你快速地为文件的每一行添加行号。通过掌握 nl 命令的基本用法和常用选项,你可以更高效地处理文本文件,并在需要时轻松地查看或打印带有行号的文件内容。如果你对 nl 命令还有其他疑问或需要了解更多高级用法,建议查阅其 man 页面或相关文档。