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:
“未知。
答案 0 :(得分:7)
您可以使用sort
和uniq -c
:
$ grep -orE 'foo:(.*)' * | sort | uniq -c
2 foo:bar
1 foo:baz