在SO上找不到这个。我在终端上执行了如下命令:

>> grep -Rl "curl" ./

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


当前回答

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

例如:

$ echo "asd" | wc -l

将返回1并且

$ echo -n "asd" | wc -l

将返回0


我经常使用grep <任何> -c

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

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

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

其他回答

使用-l(行数)开关将结果输出到wc:

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

把EaterOfCode的注释放在这里作为答案。

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

因此,命令和输出看起来像这样。

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

编辑:

虽然这个答案可能更短,因此似乎比公认的答案(使用wc)更好。我不再同意这种说法了。我觉得记住你可以通过管道到wc -l来计数行数更有用,因为你可以在其他程序中使用它,而不是grep。

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

例如:

$ echo "asd" | wc -l

将返回1并且

$ echo -n "asd" | wc -l

将返回0


我经常使用grep <任何> -c

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

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

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

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