有没有命令或程序可以添加行号以通过管道显示?

有没有命令或程序可以添加行号以通过管道显示?

我总是需要在成千上万的反馈中找到一些关键词并定位在哪一行。我曾经将反馈重定向到文件,然后用 vim 打开文件,然后执行 vim 命令:set nu来执行此操作。但它非常不方便并且会导致一些不必要的磁盘IO。
所以我想知道是否有一个命令可以达到以下结果:

$ sudo my-command | line-number-command | grep 'foo\|bar'
114  bla bla bla foo
514  bla bar bla bla
810  foo bla bla bla
1919 bla bla bar bla

答案1

在您的情况下,当您只需要对与模式匹配的行进行编号时,您不需要额外的命令:简单地使用-n以下选项更简单且更有效grep

$ sudo my-command | grep -n 'foo\|bar'
114:  bla bla bla foo
514:  bla bar bla bla
810:  foo bla bla bla
1919: bla bla bar bla

前缀会造成巨大的资源浪费全部如果您只想打印其中的一小部分,则输入文件中带有数字的行(并在此过程中创建额外的中间文件/管道)。

(顺便说一句,您也可以使用grep -n $编号全部线!这可能比 效率低nl,但也没有那么多,而且由于我们更容易忘记nl而不是忘记grep,所以它可能更容易记住。)

答案2

sudo my-command | cat -n | grep 'foo\|bar'

或者,正如 Steeldriver 在评论中提到的那样,nl可能是一个更好的答案。

相关内容