繁体   English   中英

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

[英]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
% 
  1. 获取所有文件的列表,这里和下面,以.h
  2. grep 这些文件以查找对stdlib引用,并通过选项-l仅打印(并且一次)具有至少一个匹配项的文件的名称
  3. 将名称列表传递给wc -l
  4. 使用awk对每个文件的行数求和

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM