从文件中查找模式并获取整个单词,而不仅仅是模式

从文件中查找模式并获取整个单词,而不仅仅是模式
  1. 项目清单

接口/地址:

abcd_Server1 CCDDomain
defg_Server1 GGFDomain
kdkhs_Server1 CCDDomain
abce_Server1 CCDDomain
dgdg_Server1 CCADomain
dfdkhs_Server1 GGFDomain

我需要搜索单词“Domain”,然后计算该单词的唯一出现次数。

在上面的例子中,输出应该是 3,因为有 3 个不同的名字 ( CCDDomain, GGFDomain, CCADomain)

我尝试过使用这个:

grep -oh '*Domain' "ServerNames.txt" | sort -u | wc -l 

(“-哦”我从另一个答案中得到的)

答案1

对于每个不同的出现次数包含域,与 GNUgrep或兼容。

  • 对于由以下分隔的单词间距人物:

    <file grep -o '\S*Domain\S*' | sort | uniq -c
    
  • 为了定义为数字或下划线的序列(其他任何东西都是分隔符:

    <file grep -o '\w*Domain\w*' | sort | uniq -c
    

答案2

您可以简单地用模式包装匹配模式\w,如下所示:

% grep -oh "\w*Domain\w*" ServerNames.txt
CCDDomain
GGFDomain
CCDDomain
CCDDomain
CCADomain
GGFDomain

sort -u然后你可以继续wc -l

% grep -oh '\w*Domain\w*' ServerNames.txt | sort -u | wc -l 
3

答案3

grep -o '[[:alpha:]]*Domain[[:alpha:]]*' ServerNames.txt | sort | uniq | wc -l

或者

grep -o '\w*Domain\w*' ServerNames.txt | sort | uniq | wc -l

[[:alpha:]]*表示 0 个或多个字母。因此,它将grep找到包括“Domain”的字母序列,并将它们输出以进行排序和唯一化。 (-h当只需要 grep 一个文件时不需要。)

答案4

老好awk方法:

$ awk '$2 ~ /Domain/ && !a[$2]++{ cnt++ }END{ print cnt }' ServerNames.txt
3

对于 GNU,coreutils您可以应用(如果总是Domain作为每行的第二列出现):

$ uniq -f1 <(sort -k2 ServerNames.txt) | wc -l
3

相关内容