実際に同じファイルの読み取りと書き込みを同時に行うため、提案された例(下記)は機能しません。
$ cat filename | sort | uniq > filename
パイプまたはリダイレクトのアイデアは、各パイプまたはリダイレクトの左右のコマンドが同時に並行して実行されるというものです。右側のコマンドは、左側のコマンドがまだ実行されている間に、左側のコマンドから引き渡された情報を処理します。
シナリオを機能させるには、ファイルに書き込むコマンドを開始する前に、ファイルから読み取るコマンドを終了する必要があります。これが機能するためには、最初に出力を一時的な場所にリダイレクトし、それが終了したら、一時的な場所からファイルに出力を戻す必要があります。
これを行うためのより良い方法は、基本的に前の例のように、一時ファイルにリダイレクトしてから元のファイルに名前を変更することです(移動すると既存のターゲットが削除されるため、最初にファイルを削除する必要はありません) 。
$ cat filename | sort | uniq > result
$ mv -f result filename
また、文字列変数に保存することもできます。ただし、データが十分に小さく、すべてが一度にメモリに収まる場合にのみ機能します。
echo $(cat filename | sort | uniq > result) > filename
か何か ?ただ通り過ぎて、私はそれを試す時間がありません。