> file
これは具体的ではなくファイルsed
に書き込むことですが、オプションとどのように比較されますか?マニュアルページを読みましたが、それが何を意味するのか理解していません。これらのオプションの中で本当に良いものがありますか?どちらが速いですか?少ないメモリが必要ですか?追加の洞察力があれば共有してください。stdout
sed
-i
in-place
答え1
「内部」とは、ジョブがすでに占有されている領域(ディスク領域やメモリなど)を使用し、追加のリソースを必要としないことを意味します。この場合、提供される内容に固執することが重要ですfile
。
最大の利点は、名前がまだあるファイルから出力をsed -i -e '…' file
読み取って保存できることです。これは同じファイルのように見えますが、その背景にはあります。file
file
そうではない。デフォルトでは、指定さ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
$