Linux工具 - 如何计算和列出文件中正则表达式的出现次数

时间:2013-09-25 14:40:05

标签: regex linux

我有一个包含大量类似字符串的文件。我想计算一个正则表达式的独特出现次数,并且还显示它们是什么,例如对于文件上的模式Profile: (\w*)

Profile: blah
Profile: another
Profile: trees
Profile: blah

我想发现有3次出现,并返回结果:

blah, another, trees

2 个答案:

答案 0 :(得分:6)

试试这个:

egrep "Profile: (\w*)" test.text -o | sed 's/Profile: \(\w*\)/\1/g' | sort | uniq

输出:

another
blah
trees

<强>描述

带有egrep选项的

-o将获取文件中的匹配模式。

sed只会获取捕获部分

sort后跟uniq将提供唯一元素列表

要获取结果列表中的元素数,请使用wc -l

附加命令
egrep "Profile: (\w*)" test.text -o | sed 's/Profile: \(\w*\)/\1/g' | sort | uniq | wc -l

输出:

3

答案 1 :(得分:1)

awk '{a[$2]}END{for(x in a)print x}' file

将适用于您的示例

kent$  echo "Profile: blah
Profile: another
Profile: trees
Profile: blah"|awk '{a[$2]}END{for(x in a)print x}'
another
trees
blah

如果你想在输出中有计数(3):

awk '{a[$2]}END{print "count:",length(a);for(x in a)print x }' file

用相同的例子:

kent$  echo "Profile: blah
Profile: another
Profile: trees
Profile: blah"|awk '{a[$2]}END{print "count:",length(a);for(x in a)print x }'
count: 3
another
trees
blah