开发者

Count number of occurrences of a specific regex on multiple files

开发者 https://www.devze.com 2023-04-07 07:13 出处:网络
I am trying to write up a bash script to count the number of times a specific pattern matches on a list of files.

I am trying to write up a bash script to count the number of times a specific pattern matches on a list of files.

I've googled for solutions but I've only found solutions for single files.

I know I can use egrep -o PATTERN file, but how do I generalize to a list of files and out the sum at the end?

EDIT: Adding the script I am trying to write:

#! /bin/开发者_如何学Cbash

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

Running egrep directly on the command line works fine, but within a bash script it doesn't. Do I have to specially protect the RegEx?


You could use grep -c to count the matches within each file, and then use awk at the end to sum up the counts, e.g.:

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


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

If you want the total only:

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

Edit: The sort seems unnecessary.


The accepted answer has a problem in that grep will count as 1 even though the PATTERN may appear more than once on a line. Besides, one command does the job

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号