在此命令中,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 只删除管道中的重复项?
即,为什么在常规文件上运行时不删除重复项?
sort
是一个过滤器。它读取输入,以某种方式修改数据并打印输出。grep
也是一个过滤器。通常,过滤器通过读取其标准输入并写入其标准输出来工作。
如果
… | grep … | sort -u > special_page_names
标准输入sort
from fromgrep
和标准输出sort
go tospecial_page_names
。|
您通过使用betweengrep
andsort
和> 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
虽然;选择另一个文件。有一些工具可以修改他们读取的文件(例如文本编辑器)。有一些过滤器可以选择覆盖他们读取的文件(例如
sed -i
)。您可以通过将文件指定为选项参数-o
和操作数来对同一文件进行排序写入: