このコマンドは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を使用してこれを要求します。grep
sort
> 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