正则表达式只找到一行中的一个字母

时间:2018-05-08 14:41:25

标签: bash shell command-line command

我有一个包含描述语言的单词的文档,我需要计算它们在文档中出现的次数,我必须只匹配C,C ++,Pascal,Scheme y Ada。 我如何在一行中实现它:

grep (C++|Ada|Pascal|Scheme|C)

2 个答案:

答案 0 :(得分:0)

试试这个:

grep -o 'C++\|Ada\|Pascal\|Scheme\|C' * | wc -l

答案 1 :(得分:0)

正则表达式是一个复杂的主题。您希望匹配C,但要避免匹配ABCCookbook,因此您需要确保只匹配整个字词(选项-w)。您还想提取所有匹配项,而不仅仅是匹配的行,因为您可能在特定行中有多个匹配项(例如,在您的问题中)(选项-o)。

grep -w -o 'C\|C++\|Pascal\|Scheme\|Ada' file | sort | uniq -c
# or
grep -w -o  -e C -e 'C++' -e Pascal -e Scheme -e Ada file | sort | uniq -c

sort | uniq -c会告诉您每个单词出现的次数。如果您只想要所有单词的总数,请使用wc -l,因为其他单词已显示。