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|最後にbetweenとandを使用してこれを要求します。grepsort> special_page_names

この構文は、sort -u special_page_namesツールが標準入力(対話型シェルでは端末、シェルから継承した標準入力)を無視し、代わりに読み取るように指示しますspecial_page_names。標準出力はリダイレクトされません。これはシェル(通常は端末)から継承された標準出力です。お客様の端末。データは次から飛びます。special_page_names あなたの端末に

sort -u special_page_names出力を通常のファイルに保存する場合は、sort最初の場合と同様に出力をリダイレクトすることが1つの方法です。special_page_namesそれでも再リダイレクトしないでください。;他のファイルを選択してください。

sort -u special_page_names > special_page_names_sorted

一部のツール(テキストエディタなど)では、読み取ったファイルを変更できます。一部のフィルタには、読み取ったファイルをオーバーライドするオプションがあります(例sed -i:)。ファイルをオプション引数-oとオペランドとして指定して、同じファイルにソート書き込みを実行できます。

sort -u -o special_page_names special_page_names

関連情報