在Linux 操作系统中,如果想编辑文本文件时,希望显示在其前面附加行号的行,这时 Linux 中 nl 命令就派上用场,nl 命令对文件中的行进行编号。

Linux nl命令

nl 命令是一个 Unix/Linux 实用程序,用于为行编号,接受来自文件或来自 STDIN 的输入。 它将每个指定的文件复制到 STDOUT,并在行前附加行号。

nl [OPTION]… [FILE]…

为了快速了解nl命令,我们创建了一个文本文档,里面内容是以前写的脚本。 使用 nl 命令,我们将向您展示如何在此文本文档中添加行号。

通过学习Linux 中nl 命令。 请按照以下说明了解可用于此命令的各种选项。

-b, --body-numbering=STYLEuse STYLE for numbering body lines-d, --section-delimiter=CCuse CC for separating logical pages-f, --footer-numbering=STYLEuse STYLE for numbering footer lines-h, --header-numbering=STYLEuse STYLE for numbering header lines-i, --line-increment=NUMBERline number increment at each line-l, --join-blank-lines=NUMBERgroup of NUMBER empty lines counted as one-n, --number-format=FORMATinsert line numbers according to FORMAT-p, --no-renumberdo not reset line numbers at logical pages-s, --number-separator=STRINGadd STRING after (possible) line number-v, --starting-line-number=NUMBERfirst line number on each logical page-w, --number-width=NUMBERuse NUMBER columns for line numbers--help display this help and exit--versionoutput version information and exit

nl 命令将为文件中的所有或部分行添加序号。 一旦你知道了语法。 在下面的示例中,使用该命令介绍一些最常用的选项,展示如何根据文件的格式调整命令选项。

如何在 Linux 上使用 nl 命令

1.将行号添加到文件中
要将行号添加到文件中,只需将文件名传递给 nl 命令即可。 默认情况下,行号将添加到文件中的每一行。

默认情况下,输出会添加一个制表符,然后是行号,最后是文本本身。

2.使用 -s 选项改变格式

我们试着稍微改变一下格式。 格式化行号的一种常见方法是在数字后面加上句点。 要使用 nl 命令执行此操作,我们将使用 -s 选项。 我们还将指定“.”

表示我们希望行号以点和空格开头。

3.去掉行号前面的空格

如果我们想操作行号前面的空格,可以使用 -w选项来完成。 为了完全消除空间,我们将指定宽度为 1。

请注意,我们仍在使用上一个示例中的 -s 选项,它将结合两种格式更改。

4.为空行编号

默认情况下,nl 命令不会为空行编号。只有带有文本的行才会被编号。 如果您还需要为空行编号,可以使用 -b a 选项来完成。

5.从特定行号开始编号

如果想从 1 以外的某个数字开始编号,可以使用带有 nl 的 -v 选项并指定其他数字。 例如,我们将从 50 开始对行进行编号。

6.覆盖默认增量

Linux 中的默认增量模式是 1。这可以使用 -i 选项进行更改。 第一行号是 1,不能使用 -i 更改。

7.要在每行包含前导零

要在每行包含前导零,可以将 -n rz 选项与 nl 一起使用。


linux nl命令C/C++代码实现

int main(int argc, char **argv)
{while ((c = getopt(argc, argv, "pb:d:f:h:i:l:n:s:v:w:")) != -1) {switch (c) {case 'p':restart = 0;break;case 'b':parse_numbering(optarg, BODY);break;case 'd':clen = mbrlen(optarg, MB_CUR_MAX, NULL);if (clen == (size_t)-1 || clen == (size_t)-2)errx(EXIT_FAILURE,"invalid clen argument -- %s", optarg);if (clen != 0) {memcpy(delim1, optarg, delim1len = clen);clen = mbrlen(optarg + delim1len,MB_CUR_MAX, NULL);if (clen == (size_t)-1 ||clen == (size_t)-2)errx(EXIT_FAILURE,"invalid clen argument -- %s", optarg);if (clen != 0) {memcpy(delim2, optarg + delim1len,delim2len = clen);if (optarg[delim1len + clen] != '\0')errx(EXIT_FAILURE,"invalid delim argument -- %s",optarg);}}break;case 'f':parse_numbering(optarg, FOOTER);break;case 'h':parse_numbering(optarg, HEADER);break;case 'i':errno = 0;val = strtol(optarg, &ep, 10);if ((ep != NULL && *ep != '\0') ||((val == LONG_MIN || val == LONG_MAX) && errno != 0))errx(EXIT_FAILURE,"invalid incr argument -- %s", optarg);incr = (int)val;break;case 'l':errno = 0;uval = strtoul(optarg, &ep, 10);if ((ep != NULL && *ep != '\0') ||(uval == ULONG_MAX && errno != 0))errx(EXIT_FAILURE, "invalid num argument -- %s", optarg);nblank = (unsigned int)uval;break;case 'n':if (strcmp(optarg, "ln") == 0) {format = FORMAT_LN;} else if (strcmp(optarg, "rn") == 0) {format = FORMAT_RN;} else if (strcmp(optarg, "rz") == 0) {format = FORMAT_RZ;} elseerrx(EXIT_FAILURE,"illegal format -- %s", optarg);break;case 's':sep = optarg;break;case 'v':errno = 0;val = strtol(optarg, &ep, 10);if ((ep != NULL && *ep != '\0') ||((val == LONG_MIN || val == LONG_MAX) && errno != 0))errx(EXIT_FAILURE,"invalid startnum value -- %s", optarg);startnum = (int)val;break;case 'w':errno = 0;val = strtol(optarg, &ep, 10);if ((ep != NULL && *ep != '\0') ||((val == LONG_MIN || val == LONG_MAX) && errno != 0))errx(EXIT_FAILURE,"invalid width value -- %s", optarg);width = (int)val;if (!(width > 0))errx(EXIT_FAILURE,"width argument must be > 0 -- %d",width);break;case '?':default:usage();}}argc -= optind;argv += optind;switch (argc) {case 0:break;case 1:if (strcmp(argv[0], "-") != 0 &&freopen(argv[0], "r", stdin) == NULL)err(EXIT_FAILURE, "%s", argv[0]);break;default:usage();}...
}

编译运行



总结

Linux 中的 nl 命令是数字行的缩写。 如果有一个大文本文档并且需要添加行号,nl 命令是不二之选。 无需经历手动为每行编号,只需从命令行使用 nl 即可在几秒钟内完成。更多信息可以使用 man 命令来阅读有关 nl 命令及其官方文档的更多信息。

欢迎关注微信公众号【程序猿编码】,需要nl 命令完整源码的添加本人微信号(c17865354792)

Linux 中的 nl 命令详解及C/C++代码实现(文件行数)相关推荐

  1. Linux 中的 renice 命令详解及C/C++代码实现

    Linux 中的 nice 命令有助于执行具有修改的调度优先级的程序/进程. 它启动具有用户定义的调度优先级的进程. 如果我们给一个进程更高的优先级,那么内核会为这个进程分配更多的 CPU 时间. 而 ...

  2. Linux 中的 chown 命令详解及C/C++代码实现

    操作系统中的不同用户拥有所有权和权限,以确保文件的安全并限制谁可以修改文件的内容.在 Linux 中,chown 命令用于更改系统中另一个用户对文件或目录的所有权. 什么是 chown 命令? cho ...

  3. Linux 中的 head 命令详解及C/C++代码实现

    head 命令允许您在标准输出中查看文件的初始行,而无需打开文件. 在本文中,学习了如何使用此实用程序及其选项. Linux head命令 head 命令用于打印文件或标准输出的前几行(默认为 10 ...

  4. linux cut命令学习,Linux中的cut 命令详解

    今天小编要跟大家分享的文章是关于Linux中的cut 命令详解.cut 命令在Linux和Unix中的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中.我们可以使用 cut 命令从一行字符串 ...

  5. linux中的tar命令详解,【Linux】tar命令详解

    tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用 ...

  6. linux中ln -s 命令详解

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...

  7. linux中free -m命令详解,Linux中free命令起什么作用呢?

    摘要: 下文讲述Linux中free的功能说明,如下所示: free命令功能: 用于返回linux系统的物理内存和物理空闲内存 还有交换内存 及被内核使用的缓冲和缓存 free命令的原理: 通过查询/ ...

  8. linux中的du 命令详解

    Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...

  9. linux桌面怎么解压tar文件,Linux中tar解压缩命令详解-tar文件怎么打开

    语法:tar [主选项+辅选项] 文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项:c 创建新的档案文件.如果用户想备份一个目录或是一些 ...

最新文章

  1. php实时股票,php获得股票数据
  2. 【机器学习基础】范数与正则化
  3. jfinal使用render之后还会继续往下执行代码吗
  4. 1分钟破解3dState '学习版'得一些版权信息。
  5. php create()方法,ThinkPHP中create()方法自动验证实例
  6. jquery ajax html编码,jQuery AJAX字符编码
  7. 多对多的添加修改,显示,的逻辑步骤
  8. 【LeetCode】【HOT】301. 删除无效的括号(递归)
  9. apache+php+mysq环境详细l配置
  10. 这些神经网络调参细节,你都了解了吗
  11. FFA 2021 专场解读 - 开源解决方案 / 流批一体
  12. asp.net 设置敲回车触发按钮
  13. php批量给文件添加头部版权,Perl 批量添加Copyright版权信息
  14. arcgis下载地址
  15. win10 系统Docker搭建设备共享平台stf(三)
  16. Team Tic Tac Toe
  17. Bandizip下载网盘地址
  18. 华为机试HJ96:表示数字
  19. 十九 Redis AOF持久化
  20. PATH,PYTHONPATH 与sys.path的区别

热门文章

  1. samba xp linux共享文件
  2. 【centos】安装nvida CUDA平台附带安装cudnn库及TensorRT8
  3. Android拖动实现(一个流畅的拖动排序DragSortGridView,自动滚屏)
  4. MySQL大表优化方案(推荐一)
  5. UPS不间断电源系统安全使用要领
  6. 机器人传感器网络的覆盖优化和空间负载均衡
  7. 解决管理问题的基本思维方式
  8. 从P1到P7——我在淘宝这7年转载
  9. 苏黎世联邦理工学院计算机怎么样,哪位大神知道苏黎世联邦理工学院怎么样?...
  10. AI遮天传 DL-回归与分类