计算终端输出中的行数

roo*_*unk 237 bash terminal

在SO上找不到这个.我在终端中运行了以下命令:

>> grep -Rl "curl" ./
Run Code Online (Sandbox Code Playgroud)

这将显示关键字curl发生的文件列表.我想计算文件数量.我能想到的第一种方法是计算终端中输出的行数.我怎样才能做到这一点?

Joã*_*lva 433

将结果传递给wc使用-l(行计数)开关:

grep -Rl "curl" ./ | wc -l
Run Code Online (Sandbox Code Playgroud)

  • 我一直在使用 `grep "" -c` 但这更好:) (3认同)
  • 应该注意的是,这种将管道连接到wc的技巧将适用于任何输出,而不仅仅是grep输出。例如,可以将其与git diff结合使用。 (3认同)
  • 这是公认的答案,因为问题通常询问如何计算终端输出的行数。`grep -c` 没有回答这个问题。 (2认同)

Jel*_*teF 55

将EaterOfCode的评论作为答案.

grep本身也有-c标志,它只返回计数

所以命令和输出可能看起来像这样.

$ grep -Rl "curl" ./ -c
24
Run Code Online (Sandbox Code Playgroud)

编辑:

虽然这个答案可能更短,因此可能看起来比接受的答案(即使用wc)更好.我不同意这个.我想要记住你可以通过管道来计算线条wc -l更有用,因为你可以将它与其他程序一起使用grep.

  • 完善.因为在android shell中,没有'wc'命令. (7认同)

小智 7

如果最后一行以换行符结尾,则管道到 'wc' 可能会更好(我知道在这种情况下,它会)
但是,如果最后一行不以换行符结尾,则 'wc -l' 会返回错误结果。

例如:

$ echo "asd" | wc -l
Run Code Online (Sandbox Code Playgroud)

将返回1

$ echo -n "asd" | wc -l
Run Code Online (Sandbox Code Playgroud)

将返回 0


所以我经常使用的是 grep <anything> -c

$ echo "asd" | grep "^.*$" -c
1

$ echo -n "asd" | grep "^.*$" -c
1
Run Code Online (Sandbox Code Playgroud)

这比wc -l将要返回的更接近现实。