当前位置:   article > 正文

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

nl命令

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

Linux nl命令

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

nl [OPTION]… [FILE]…

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

在这里插入图片描述

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

-b, --body-numbering=STYLE
       use STYLE for numbering body lines

-d, --section-delimiter=CC
       use CC for separating logical pages

-f, --footer-numbering=STYLE
       use STYLE for numbering footer lines

-h, --header-numbering=STYLE
       use STYLE for numbering header lines

-i, --line-increment=NUMBER
       line number increment at each line

-l, --join-blank-lines=NUMBER
       group of NUMBER empty lines counted as one

-n, --number-format=FORMAT
       insert line numbers according to FORMAT

-p, --no-renumber
       do not reset line numbers at logical pages

-s, --number-separator=STRING
       add STRING after (possible) line number

-v, --starting-line-number=NUMBER
       first line number on each logical page

-w, --number-width=NUMBER
       use NUMBER columns for line numbers

--help display this help and exit

--version
       output version information and exit

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

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;
				} 
				else
					errx(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();
	}

	...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115

编译运行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/322879
推荐阅读
相关标签
  

闽ICP备14008679号