计算终端输出中的行数

Posted

技术标签:

【中文标题】计算终端输出中的行数【英文标题】:count number of lines in terminal output 【发布时间】:2012-09-09 13:30:39 【问题描述】:

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

>> grep -Rl "curl" ./

这将显示出现关键字 curl 的文件列表。我想计算文件的数量。我能想到的第一种方法是计算终端中输出的行数。我该怎么做?

【问题讨论】:

grep 本身也有 -c 标志,它只返回计数 相关:unix.stackexchange.com/questions/248245/… 【参考方案1】:

使用-l行数)开关将结果传送到wc

grep -Rl "curl" ./ | wc -l

【讨论】:

我一直在使用grep "" -c,但这更好:) 应该注意的是,这种管道到 wc 的技巧适用于任何输出,而不仅仅是 grep 输出。例如,它可以与 git diff 结合使用。 为什么这是公认的答案?正如一些 cmets 提到的那样,应该使用内置函数 grep -c 而不是将输出通过管道传输到另一个程序。例如。您甚至不会使用 Word 以外的其他文本编辑器更改 Word 文档中的字符,对吗? 这是公认的答案,因为该问题通常询问如何计算终端输出的行数。 grep -c 没有回答。【参考方案2】:

将 EaterOfCode 的评论放在这里作为答案。

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

所以命令和输出可能如下所示。

$ grep -Rl "curl" ./ -c
24

编辑:

虽然这个答案可能更短,因此看起来比公认的答案更好(即使用wc)。我不再同意这一点。我想记住你可以通过管道到wc -l 来计算行数更有用,因为你可以将它与grep 之外的其他程序一起使用。

【讨论】:

【参考方案3】:

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

例如:

$ echo "asd" | wc -l

将返回1

$ echo -n "asd" | wc -l

将返回0


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

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

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

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

【讨论】:

【参考方案4】:

"abcd4yyyy" | grep 4 -c 给出的计数为1

【讨论】:

不清楚这增加了什么,其他答案在 6 年前还没有说得更好。

以上是关于计算终端输出中的行数的主要内容,如果未能解决你的问题,请参考以下文章

计算 linux 中 CLI 输出的行数

Rspec:测试CSV输出中的行数

计算 30 天 bin 中的行数

为不同时间段的每个相关记录计算 db 中的行数

“matlab”矩阵的长度怎么计算?

shell脚本,awk利用NF来计算文本显示的行数。