我正在尝试编写一个bash脚本来计算特定模式在文件列表中匹配的次数。
我已经搜索了解决方案,但我只找到了单个文件的解决方案。
我知道我可以使用egrep -o PATTERN file
,但是如何推广到文件列表并在结尾处总结?
编辑:添加我想写的脚本:
#! /bin/bash
egrep -o -c "\s*assert.*;" $1 | awk -F: '{sum+=$2} END{print sum}'
直接在命令行上运行egrep工作正常,但在bash脚本中却没有。我是否必须特别保护RegEx?
答案 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