递归计算模式出现次数时删除文件名

递归计算模式出现次数时删除文件名

当我运行 grep 命令时:

grep -rc 'PATTERN' .

它打印出该模式出现的行数,但它看起来像这样:

./hotel_232424.dat:234

等等...

我如何删除该./hotel_232424.dat:零件并只打印出数字?

答案1

通过 GNU 实现grep,您可以使用-h/--no-filename选项。

$ grep -rc PATTERN .
./b:1
./a:0
./1/2/c:2
$ grep -rhc PATTERN .
1
0
2

便携式/标准等效项是:

$ find . -type f -exec grep -c PATTERN {} \;
0
2
1

但这意味着grep每个文件运行一次调用。

相反,如果您想要出现的总数(此处为 1+2 = 3),您可以这样做(可移植):

$ find . -type f -exec cat {} + | grep -c PATTERN
3

(请注意,如果某些文件在最后一行之后有数据(因此,非文本文件),则可能会弄乱结果)

或者,用一个grep像你这样的支持-r

$ grep -r PATTERN . | wc -l
3

相关内容