如何得到没有。行计数与文件夹中所有文件的字符串匹配

时间:2014-10-25 10:47:31

标签: linux bash shell

问题描述: - 我有一个包含很多文本文件的文件夹。我想在该文件夹中的所有文件中搜索特定的字符串,说“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在那里

等.......但我想要的actaul输出是从上面输出的3。

我还尝试了几个bash命令,但没有用。

我的问题: - 是否有任何bash命令用于此类目的。如果没有如何为以下要求编写脚本。

请帮助我

4 个答案:

答案 0 :(得分:10)

您可以使用grep管道wc -l以获取包含关键字的行数:

grep -r "string_example" . | wc -l

答案 1 :(得分:3)

您也可以使用awk执行此操作:

awk '/string_example/{++c}END{print c}' *
每当一行与模式匹配时,

c就会递增。读完所有文件后,打印总计数。

答案 2 :(得分:2)

你想要这样的东西吗?

grep -l string_example *|xargs wc -l

编辑:
您想获得所有文件中匹配的行数,或者包含匹配行的文件中行的总数?

答案 3 :(得分:0)

在shell提示符下给出此命令,您将

% find -type f -name \*.h | xargs grep -l stdlib  | xargs wc -l | awk '{a+=$1} END{print a}'
16372
% 
  1. 获取所有文件的列表,此处和下方以.h
  2. 结尾
  3. grep这些文件以查找对stdlib的引用,并通过选项-l仅打印(和一次)至少有一个匹配的文件的名称
  4. 将名单列表传递给wc -l
  5. 使用awk对每个文件的行数进行求和