Stack Overflow已经有一些关于计算字符串出现次数的好帖子(例如"foo"),就像这样:用grep计算许多文件中出现的所有字符串.但是,我一直无法找到一个稍微复杂的变种的答案.
假设我想计算foo:[*whatever*]*whatever else*文件夹中存在多少个" "的实例; 我会做:
grep -or 'foo:[(.*)]' * | wc -l
Run Code Online (Sandbox Code Playgroud)
然后我会回到"55"(或无论数量是多少).但如果我有一个像这样的文件怎么办?
foo:bar abcd
foo:baz efgh
not relevant line
foo:bar xyz
Run Code Online (Sandbox Code Playgroud)
我想知道有多少个实例foo:bar与多少个foo:baz等等?换句话说,我希望输出这东西,如:
bar 2
baz 1
Run Code Online (Sandbox Code Playgroud)
我假设有一些链接greps或使用不同命令的方法wc,但我不知道它是什么...任何shell脚本专家都有任何建议吗?
PS我意识到,如果我知道可能的子串的集合(即,如果我知道只有"foo:bar"和"foo:baz"),这将更简单,但不幸的是有一些"可以来的东西在foo:"未知之后.
你可以使用sort和uniq -c:
$ grep -orE 'foo:(.*)' * | sort | uniq -c
2 foo:bar
1 foo:baz
Run Code Online (Sandbox Code Playgroud)