2012-07-25 20 views
2

好了,所以可以说我有这样一个文本文件地址列表:如何只grep每个地址之一。 Linux的

https://www.amazon.com 
https://www.google.com 
https://www.msn.com 
https://www.google.com 
https://www.netflix.com 
https://www.amazon.com 
... 

有一大堆其他的东西有,但基本上我遇到的问题是,运行此之后:

grep "https://" addresses.txt | cut -d"/" -f3

我得到了amazon.com和google.com两次。我只想得到他们一次。我不知道如何仅仅搜索grep来寻找独特的东西。

回答

6

管你的输出到sort和uniq:

grep "https://" addresses.txt | cut -d"/" -f3 | sort | uniq 
+0

哇,我不知道有一个办法做到这一点。我想我不知道如何很好地使用谷歌...非常感谢,我会尽快接受你的答案,系统让我 – bloodstorm17 2012-07-25 15:29:28

3

您可以使用sort用于此目的。

只需将另一个管道添加到您的命令中,并使用排序的独特功能来删除重复项。

 grep 'https://' addresses.txt | cut -d"/" -f3 | sort -u 

编辑:您可以使用sed代替grepcut这将您的命令减少

sed -n '[email protected]://\([^/]*\).*@\[email protected]' < addresses.txt | sort -u 
1

grep "https://" addresses.txt | cut -d"/" -f3 | sort | uniq是你想要

1

我会筛选结果-grep的后什么。

例如使用sort -u进行排序,然后生成一组唯一的条目。

您也可以使用uniq这个,但输入必须提前排序。

这是能够将这些公用设施连接在一起的美丽。您不需要单独的grepping/sorting/uniq(ing)工具,就可以获得不同的可执行文件,并且可以将它们链接在一起。

1

使用awk只能使用一个UNIX命令,而不是四个3管:

awk 'BEGIN {FS="://"}; { myfilter = match($1,/https/); if (myfilter) loggeddomains[$2]=0} END {for (mydomains in loggeddomains) {print mydomains}}' addresses.txt

相关问题