计算多个文件上特定正则表达式的出现次数

时间:2011-09-22 14:57:23

标签: bash

我正在尝试编写一个bash脚本来计算特定模式在文件列表中匹配的次数。

我已经搜索了解决方案,但我只找到了单个文件的解决方案。

我知道我可以使用egrep -o PATTERN file,但是如何推广到文件列表并在结尾处总结?

编辑:添加我想写的脚本:

#! /bin/bash

egrep -o -c "\s*assert.*;" $1 | awk -F: '{sum+=$2} END{print sum}'

直接在命令行上运行egrep工作正常,但在bash脚本中却没有。我是否必须特别保护RegEx?

3 个答案:

答案 0 :(得分:4)

您可以使用grep -c来计算每个文件中的匹配项,然后在末尾使用awk来总结计数,例如:

grep -c PATTERN * | awk -F: '{sum+=$2} END{print sum}'

答案 1 :(得分:3)

grep -o <pattern> file1 [file2 .. | *] |
    uniq -c

如果您只想要总数:

grep -o <pattern> file1 [file2 .. | *] | wc -l

编辑:排序似乎没必要。

答案 2 :(得分:1)

接受的答案有一个问题,即即使PATTERN在一行上出现多次,grep也会计为1。此外,一个命令完成工作

awk 'BEGIN{RS="\0777";FS="PATTERN"} { print NF-1 } ' file