简洁优雅地将连续数字添加到索引行

3 vim numbering seq

我通常这样做

$ wc questions
  33   36 3105 questions
$ seq 1 33 > nums
$ paste nums questions
1       Content
2       ...
.
.
33      End Content
Run Code Online (Sandbox Code Playgroud)

但我觉得可以有更快的方法来做到这一点,没有看起来很糟糕的虚拟文件。如何使用一些基本的 *ix -tool?有什么更简单的方法吗?我使用 Vim,所以我对基于 Vim 的解决方案也很满意,但简单的基于 unix 的解决方案也有效(实际上在某些情况下可能更好,我总是可以在编辑器中生成)。

下面是一般情况。

输入

A
B
C
.
.
X
Run Code Online (Sandbox Code Playgroud)

输出

1. A
2. B
3. C
.
.
N. X
Run Code Online (Sandbox Code Playgroud)

Jam*_*ger 17

这正是nl它的目的。例如,假设file.txt包含您的样本输入,并且您希望它看起来像您的样本输出,您可以执行以下操作:

nl -nln '-s. ' file.txt
Run Code Online (Sandbox Code Playgroud)

的联机帮助页nl更详细地介绍了它的使用。它使您可以对输出格式进行很多控制。

  • 要编号 **all** 行,还需要 `-ba`。否则它只对非空行进行编号,但仍然打印未编号的空行,这意味着行号不会增加以反映换行符的实际数量......这修复了它:`nl -nln -ba -s '。'` (5认同)
  • @Aki:从 4.7-RELEASE 开始的 [FreeBSD 手册页](http://www.freebsd.org/cgi/man.cgi?query=nl&apropos=0&sektion=1&manpath=FreeBSD+4.7-RELEASE&arch=default&format=html) 声称它符合 POSIX.1,并列在 [Single Unix Specification](http://pubs.opengroup.org/onlinepubs/007908799/xcu/nl.html) 版本 2 中。 (2认同)

Kyl*_*nes 13

我很惊讶cat -n现在还没有被提及。

  • 太标准了 它可以使东西便携...... (3认同)

man*_*ork 5

只是为了这个列表的完整性,sed也可以这样做:

sed '=' questions | sed 'N;s/\n/. /'
Run Code Online (Sandbox Code Playgroud)

遗憾的是,该=命令将行号打印在单独的行上,因此只有单独的sed调用才能美化格式。