如何只grep每个地址之一。 Linux的

时间:2012-07-25 15:24:54

标签: linux bash shell grep

好的,我们假设我在这样的文本文件中有一个地址列表:

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。我想只让他们一次。我不知道如何只针对那些独特的东西进行搜索。

5 个答案:

答案 0 :(得分:6)

将输出传输到sort和uniq:

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

答案 1 :(得分:3)

您可以将sort用于此目的。

只需在命令中添加另一个管道,并使用sort的唯一功能删除重复项。

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我会过滤结果 post-grep

e.g。使用sort -u进行排序,然后生成一组唯一条目。

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

这是能够将这些实用程序连接在一起的美妙之处。您可以获得不同的可执行文件,而不是单个grepping / sorting / uniq(ing)工具,您可以按照自己的意愿将它们链接在一起。

答案 4 :(得分:1)

使用awk,你只能使用一个unix命令而不是四个管道:

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