3

Stack Overflow 已经有一些关于计算字符串出现次数的精彩文章(例如“foo”),例如:使用 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:bazs 等?换句话说,我希望输出类似于

bar 2
baz 1

我认为有一些方法可以链接greps,或者使用与 s 不同的命令wc,但我不知道它是什么......那里的任何 shell 脚本专家有什么建议吗?

PS我意识到,如果我知道可能的子字符串集(即,如果我知道只有“foo:bar”和“foo:baz”)这会更简单,但不幸的是,有一组“可能发生的事情” "之后foo:是未知的。

4

1 回答 1

7

你可以使用sortand uniq -c

$ grep -orE 'foo:(.*)' * | sort | uniq -c
      2 foo:bar
      1 foo:baz
于 2013-05-03T21:12:08.717 回答