如何在文本中添加行号?

Scr*_*bie -2 linux bash sed awk shell-script

我的文字是:

Hi
Bye
Nope
Sorry
Cya
Chill
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到:

[1] Hi
[2] Bye
[3] Nope
Run Code Online (Sandbox Code Playgroud)

等等等等?

Kus*_*nda 6

nl(“行数”)工具做到这一点:

$ cat file
Hi
Bye

Nope
Sorry

Cya
Chill

$ nl file
     1  Hi
     2  Bye

     3  Nope
     4  Sorry

     5  Cya
     6  Chill
Run Code Online (Sandbox Code Playgroud)

nl您可以使用多种选项。它也做页码等。

的一些实现cat也支持行编号:

$ cat -n file
     1  Hi
     2  Bye
     3
     4  Nope
     5  Sorry
     6
     7  Cya
     8  Chill
Run Code Online (Sandbox Code Playgroud)

awk

$ awk '{ print NR, $0 }' file
1 Hi
2 Bye
3
4 Nope
5 Sorry
6
7 Cya
8 Chill
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想为空行编号:

$ awk '$0 { print ++nr, $0; next } { print }' file
1 Hi
2 Bye

3 Nope
4 Sorry

5 Cya
6 Chill
Run Code Online (Sandbox Code Playgroud)

使用awk,还可以轻松进行特殊格式设置:

$ awk -vOFS="\t" '$0 { print "[" ++nr "]", $0; next } { print }' file
[1]     Hi
[2]     Bye

[3]     Nope
[4]     Sorry

[5]     Cya
[6]     Chill
Run Code Online (Sandbox Code Playgroud)

或者...

$ awk -vOFS=":\t" '$0 { printf("[%03d]%s%s\n", ++nr, OFS, $0); next } { print }' file
[001]:  Hi
[002]:  Bye

[003]:  Nope
[004]:  Sorry

[005]:  Cya
[006]:  Chill
Run Code Online (Sandbox Code Playgroud)

paste手册(在 OpenBSD 上):

$ sed '=' file | paste -s -d '\t\n' - -
1       Hi
2       Bye
3
4       Nope
5       Sorry
6
7       Cya
8       Chill
Run Code Online (Sandbox Code Playgroud)