计算终端输出中的行数
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 年前还没有说得更好。以上是关于计算终端输出中的行数的主要内容,如果未能解决你的问题,请参考以下文章