在此命令中,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
。您通过在和|
之间使用以及在末尾使用来请求此操作。grep
sort
> 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