赞
踩
在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
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(); } ... }
编译运行
总结
Linux 中的 nl 命令是数字行的缩写。 如果有一个大文本文档并且需要添加行号,nl 命令是不二之选。 无需经历手动为每行编号,只需从命令行使用 nl 即可在几秒钟内完成。更多信息可以使用 man 命令来阅读有关 nl 命令及其官方文档的更多信息。
欢迎关注微信公众号【程序猿编码】,需要nl 命令完整源码的添加本人微信号(c17865354792)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。