[英]How to get no. of lines count that matches a string from all the files in a folder
问题描述:-我有一个包含很多文本文件的文件夹。 我想在该文件夹中的所有文件中搜索一个特定的字符串,比如“string_example”。然后我应该得到总数。 具有字符串“string_example”的所有文件中的行数。 这意味着如果第一个文本文件中有 5 个匹配行,第二个文本文件中有 10 个匹配行,第三个文本文件中有 3 个匹配行。那么输出应该是 5+10+3=18
我尝试过的: -我已经通过互联网冲浪并找到了一些命令,例如
grep -r -n ".string_example" .
此 bash 命令将打印文件名以及包含字符串“string_example”的行的行号。为了更好地理解,这里是示例输出
第一个文件:1:string_example 在那里
第一个文件:2:string_example 不存在
第二个文件:1:string_example 在那里
等等......但我想要的实际输出是上述输出中的 3。
我还尝试了更多的 bash 命令,但没有用。
我的问题:- 是否有任何用于此类目的的 bash 命令。如果没有,如何为以下要求编写脚本。
请帮助我
您可以使用wc -l
您的grep
以获取包含您的关键字的行数:
grep -r "string_example" . | wc -l
你也可以使用 awk 来做到这一点:
awk '/string_example/{++c}END{print c}' *
每当一行与模式匹配时, c
就会增加。 读取所有文件后,打印总计数。
你想要这样的东西吗?
grep -l string_example *|xargs wc -l
编辑:
您想获取所有文件中匹配的行数,或包含匹配行的文件中的总行数?
使用在 shell 提示符下给出的这个命令,你将
% find -type f -name \*.h | xargs grep -l stdlib | xargs wc -l | awk '{a+=$1} END{print a}'
16372
%
.h
stdlib
引用,并通过选项-l
仅打印(并且一次)具有至少一个匹配项的文件的名称wc -l
awk
对每个文件的行数求和
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.