sort file
コマンドを使用すると、ファイルはその内容をソートされた方法で表示します。
ファイルリダイレクトを使用して、ソートされた出力をリダイレクトできます。
sort input-file > output_file
あるいは、-o
、--output=FILE
オプションを使って同じ入力ファイルと出力ファイルを指定することもできます。
sort -o file file
注:よくある間違いは、出力を同じ入力ファイル(例えばsort file > file
)にリダイレクトしようとすることです。シェルがリダイレクトを行っている(sort(1)プログラムではない)ためこれは機能しません。入力ファイル(出力でもあるので)はsortを与える直前に消去されます) (1)それを読む機会をプログラムします。
sort
コマンドは、デフォルトでソート操作の結果を標準出力に出力します。 「インプレース」ソートを達成するために、これをすることができます:
sort -o file file
これは入力file
をソートされた出力で上書きします。出力を指定するために使用される-o
スイッチ POSIXで定義されています 、すべてのバージョンのsort
で使用可能になります。
-o標準出力の代わりに使用される出力ファイルの名前を指定します。このファイルは、入力ファイルと同じものにすることができます。
-o
スイッチなしでsort
のバージョンを持つことができないほど残念な場合( Luis が存在することを保証します)、標準的な方法で "インプレース"編集を実現できます。
sort file > tmp && mv tmp file
ファイルをその場でソートするには、次のことを試してください。
echo "$(sort your_file)" > your_file
他の回答で説明したように、出力を直接入力ファイルにリダイレクトすることはできません。しかし、最初にsort
コマンドを評価してから元のファイルにリダイレクトすることができます。このようにして、インプレースソートを実装できます。
同様に、このトリックをpaste
のような他のコマンドに適用して行単位の追加を実装することもできます。
これは(ab)がvim
を使うアプローチです:
vim -c :sort -c :wq -E -s "${filename}"
-c :sort -c :wq
部分はファイルが開いた後にvimにコマンドを呼び出します。 vimが端末を引き寄せない「ヘッドレス」モードで実行するためには、-E
と-s
が必要です。
これはsort -o "${filename}" "${filename}"
アプローチよりもほとんど利点がありません。ただし、filename引数を一度だけ取るという点が異なります。
これは私にとって.gitignore
ファイルのformatter
エントリにnanorc
ディレクティブを実装するのに役立ちました。これが私がそのために使ったものです:
syntax "gitignore" "\.gitignore$"
formatter vim -c :sort -c :wq -E -s
sort file | sponge file
これは以下のFedoraパッケージにあります。
moreutils : Additional unix utilities
Repo : Fedora
Matched from:
Filename : /usr/bin/sponge
それらをオーバーライドしているフォルダーとサブフォルダー内のすべてのファイルをソートしますか?
これを使って:
find . -type f -exec sort {} -o {} \;