sed:-iと>ファイルの違いは何ですか?

sed:-iと>ファイルの違いは何ですか?

> fileこれは具体的ではなくファイルsedに書き込むことですが、オプションとどのように比較されますか?マニュアルページを読みましたが、それが何を意味するのか理解していません。これらのオプションの中で本当に良いものがありますか?どちらが速いですか?少ないメモリが必要ですか?追加の洞察力があれば共有してください。stdoutsed-iin-place

答え1

「内部」とは、ジョブがすでに占有されている領域(ディスク領域やメモリなど)を使用し、追加のリソースを必要としないことを意味します。この場合、提供される内容に固執することが重要ですfile

最大の利点は、名前がまだあるファイルから出力をsed -i -e '…' file読み取って保存できることです。これは同じファイルのように見えますが、その背景にはあります。filefileそうではない。デフォルトでは、指定さsedれたファイルを読み取り、処理された出力を一時ファイルに移動し、一時ファイルを元のファイルに置き換えて元の名前に移動します。

だからこれはありません厳しく別のファイルが必要で、ある時点であなたが持っているので、「所定の位置に」二つファイルですが、結果はほぼ所定の位置にあるのと同じです。別のファイルに書き込む利点があります:

ファイルの以前のバージョンは自動的に最新バージョンに置き換えられるため、各時点でファイル名はファイルの有効で完全なバージョンを指します。

一方、それほどsed -e '…' file >file多くはありません。さらに悪いことは、fileコンテンツが失われることです。動作は次のように説明されます。パイプを元の位置に戻します。>これにより、-iデータが失われる可能性があります。

答え2

それはすべてあなたが望むものに依存します。ただし、パイプは通常非常に高速で、IOバッファのみを使用します。

-私ファイルを編集するための非標準オプションです。所定の位置に.sed そうでない場合、標準入力のデータを標準出力に変換します。

私のコンピュータでは、1MBファイルの速度の違いを感じませんでした。

$ cat my_file.txt 
This is my file
$ sed -i "" s/my/your/g my_file.txt
$ cat my_file.txt 
This is your file
$

関連情報