Grep Shell Scripting:如何计算每个子串的出现次数?

时间:2013-05-03 21:09:53

标签: shell grep

Stack Overflow已经有一些关于计算字符串出现次数的好帖子(例如“foo”),如下所示:count all occurrences of string in lots of files with grep。但是,我一直无法找到更复杂的变种的答案。

假设我想计算文件夹中存在多少个“foo:[*whatever*]*whatever else*”的实例;我会这样做:

grep -or 'foo:[(.*)]' * | wc -l

然后我会回来“55”(或无论重要的是什么)。但是如果我有一个像这样的文件怎么办?

foo:bar abcd
foo:baz efgh
not relevant line
foo:bar xyz

我希望计算foo:bar的实例数与foo:baz的实例数等等?换句话说,我想输出 之类的东西:

bar 2
baz 1

我假设有一些方法来链接grep,或者使用wc中的其他命令,但我不知道它是什么......任何shell脚本专家都有任何建议吗?

P.S。我意识到,如果我知道可能的子串的集合(即,如果我知道只有“foo:bar”和“foo:baz”),这将更简单,但遗憾的是有一些“可以追溯的东西foo:“未知。

1 个答案:

答案 0 :(得分:7)

您可以使用sortuniq -c

$ grep -orE 'foo:(.*)' * | sort | uniq -c
      2 foo:bar
      1 foo:baz