2

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

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。

4

5 回答 5

6

管道输出到 sort 和 uniq:

grep "https://" addresses.txt | cut -d"/" -f3 | sort | uniq
于 2012-07-25T15:27:38.040 回答
3

您可以sort用于此目的。

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

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

编辑:您可以使用sed而不是,grepcut会将您的命令减少到

    sed -n 's@https://\([^/]*\).*@\1@p' < addresses.txt | sort -u
于 2012-07-25T15:27:56.883 回答
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

于 2012-07-28T13:55:07.873 回答
1

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

于 2012-07-25T15:28:04.607 回答
1

我会过滤结果post-grep

例如,sort -u用于排序,然后生成一组唯一条目。

您也可以使用uniq此功能,但必须提前对输入进行排序。

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

于 2012-07-25T15:28:07.577 回答