问题描述: - 我有一个包含很多文本文件的文件夹。我想在该文件夹中的所有文件中搜索特定的字符串,说“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命令用于此类目的。如果没有如何为以下要求编写脚本。
请帮助我
答案 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
%
.h
stdlib
的引用,并通过选项-l
仅打印(和一次)至少有一个匹配的文件的名称wc -l
awk
对每个文件的行数进行求和