为什么 sort -u 仅删除管道中的重复项?

为什么 sort -u 仅删除管道中的重复项?

在此命令中,sort -u删除了重复项。

curl https://en.wikipedia.org/wiki/Help:Special_page -s | grep -oP 'Special:\K[a-zA-Z0-9]*' | sort -u > special_page_names

在这个命令中,它没有。

curl https://en.wikipedia.org/wiki/Help:Special_page -s | grep -oP 'Special:\K[a-zA-Z0-9]*' > special_page_names
sort -u special_page_names

为什么 sort -u 仅删除管道中的重复项?
即,为什么它在常规文件上运行时不删除重复项?

答案1

sort是一个过滤器。它读取输入,以某种方式修改数据并打印输出。grep也是一个过滤器。

通常过滤器的工作方式是读取其标准输入并写入其标准输出。

如果 的… | grep … | sort -u > special_page_names标准输入sort来自grep且标准输出sort前往special_page_names。您通过在和|之间使用以及在末尾使用来请求此操作。grepsort> special_page_names

该语法sort -u special_page_names告诉工具忽略其标准输入(在交互式 shell 中,这是终端,从 shell 继承的标准输入)并进行读取special_page_names。标准输出不被重定向;它是从 shell(通常是终端)继承的标准输出,在你的情况下终端。数据飞自special_page_names 到您的终端

如果您想将 的输出保存sort -u special_page_names到常规文件,那么一种方法是重定向 的输出sort,就像第一种情况一样。不要重定向回special_page_names虽然;选择另一个文件。

sort -u special_page_names > special_page_names_sorted

有些工具可以修改它们读取的文件(例如文本编辑器)。有些过滤器可以选择覆盖它们读取的文件(例如sed -i)。您可以通过将文件指定为选项参数-o和操作数来使排序写入同一文件:

sort -u -o special_page_names special_page_names

相关内容