- 项目清单
接口/地址:
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