sort file
コマンドを使用すると、ファイルはその内容をソートされた方法で表示します。何らかの種類の出力を取得したくないが、ソートされたファイルがある場合はどうなりますか?
sort infile >outfile
と、ソートされた出力がファイル「outfile」に取得されます。その後、元の「infile」を消去すると、すべてが正常になります。
sort file
コマンドを使用すると、ファイルはその内容をソートされた方法で表示します。何らかの種類の出力を取得したくないが、ソートされたファイルがある場合はどうなりますか?
sort infile >outfile
と、ソートされた出力がファイル「outfile」に取得されます。その後、元の「infile」を消去すると、すべてが正常になります。
回答:
ファイルのリダイレクトを使用して、ソートされた出力をリダイレクトできます。
sort input-file > output_file
または、並べ替えの-o
、--output=FILE
オプションを使用して、同じ入力ファイルと出力ファイルを示すことができます。
sort -o file file
注:よくある間違いは、出力を同じ入力ファイル(などsort file > file
)にリダイレクトしようとすることです。シェルがリダイレクト(sort(1)プログラムではない)を行っているため、これは機能せず、入力ファイル(出力でもある)は、sort(1)プログラムにそれを読み取る機会を与える直前に消去されます。
GNU sort
情報ページから: -o OUTPUT-FILE'
--output = OUTPUT-FILE '標準出力の代わりにOUTPUT-FILEに出力を書き込みます。新しいシステムでは、-o' cannot appear after an input file if
POSIXLY_CORRECT 'が設定されsort F -o F'. Portable scripts should specify
ます。たとえば、入力ファイルの前に-o OUTPUT-FILE' が設定されます。
sort -o file{,}
このsort
コマンドは、デフォルトでソート操作の結果を標準出力に出力します。「インプレース」ソートを実現するには、次のようにします。
sort -o file file
これにより、入力file
がソートされた出力で上書きされます。-o
出力を指定するために使用されるスイッチは、POSIXによって定義されるので、すべてのバージョンで利用可能であるべきですsort
。
-o標準出力の代わりに使用される出力ファイルの名前を指定します。このファイルは、入力ファイルの1つと同じにすることができます。
残念なことにsort
、-o
スイッチなしのバージョン(Luisはそれらが存在することを保証します)のバージョンを持っている場合は、標準的な方法で「インプレース」編集を行うことができます。
sort file > tmp && mv tmp file
sort file | sponge file
これは次のFedoraパッケージにあります:
moreutils : Additional unix utilities
Repo : fedora
Matched from:
Filename : /usr/bin/sponge
sudo apt install moreutils
ファイルを所定の場所に並べ替えるには、次のことを試してください。
echo "$(sort your_file)" > your_file
他の回答で説明されているように、出力を直接入力ファイルにリダイレクトすることはできません。ただし、sort
最初にコマンドを評価してから、元のファイルにリダイレクトすることができます。このようにして、インプレースソートを実装できます。
同様に、paste
行単位の追加を実装するなど、他のコマンドにもこのトリックを適用できます。
echo
POSIXにバックスラッシュエスケープと缶混乱、および-o
で説明したように、入力と同じファイルに対して作業を行います。stackoverflow.com/a/29244387/895245
これが(ab)使用するアプローチvim
です:
vim -c :sort -c :wq -E -s "${filename}"
この-c :sort -c :wq
部分は、ファイルが開いた後にvimへのコマンドを呼び出します。 -E
そして-s
、vimが端末に描画しない「ヘッドレス」モードで実行するために必要です。
これはsort -o "${filename}" "${filename}"
、filename引数を1回しか受け取らないことを除いて、アプローチに比べてほとんど利点がありません。
これは、ファイルのエントリにformatter
ディレクティブを実装するのに役立ちました。これは私がそのために使用したものです:nanorc
.gitignore
syntax "gitignore" "\.gitignore$"
formatter vim -c :sort -c :wq -E -s
nanorc
か?皮肉なこと。
file
同じファイルの並べ替えられたコンテンツで置き換えますか?あなたの質問が現在述べられている方法で、何もしないことは正解です(あなたは何も出力したくないので何もしないでください)。