Sort

為什麼 sort -u 只刪除管道中的重複項?

  • March 12, 2022

在此命令中,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標準輸入sortfrom fromgrep和標準輸出sortgo to special_page_names|您通過使用between grepandsort> 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

引用自:https://unix.stackexchange.com/questions/694127