添加行号到文本中
引子: 在 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