添加行号到文本中

  |   0 评论   |   1,510 浏览

引子: 在 shell 交互中,有时把过滤出的结果展示出来给用户,然后让用户选择.此时想让用户输入他想要的那一行结果.此时,能给每一行加一个行号就最好了.

最开始想到的是sed,用它可以使用命令=输出行号.但是此命令不能直接把行号加到一个文本的每一行的最前面.不能像如s/^/=/p 这样直接把行号直接放到最前面.因为在 s命令里面.= 不是一个命令,就只是一个普通的等号而已.不过可以变通的先把行号输入后再对结果进行二次处理.

echo -e 'a\nb\nc\nd\nd\nf' | sed '=' | sed 'N;s/\n/:/'

1:a
2:b
3:c
4:d
5:d
6:f

以上即是对加行号的简单处理.发现还有很多加行号的处理命令

nl

# nl 默认会在行号前面添加空格(4个)
$echo -e 'a\nb\nc\nd\nd\nf' |nl
     1	a
     2	b
     3	c
     4	d
     5	d
     6	f

同样.可以在行号与内容之间添加一个分隔::,使用参数-s

$echo -e 'a\nb\nc\nd\nd\nf' |nl -s ":"
     1:a
     2:b
     3:c
     4:d
     5:d
     6:f

cat

cat with the option -n also outputs lines with its line numbers

$echo -e 'a\nb\nc\nd\nd\nf' | cat -n
     1	a
     2	b
     3	c
     4	d
     5	d
     6	f

使用awk

awk 'BEGIN{i=1} /.*/{printf "%d.% s\n",i,$0; i++}' test

参考

1: adding-line-numbers-to-file

评论

发表评论


取消