sedをインプレース編集 (ここで提案) とcat (ここで提案) を使用して比較するために、いくつかのベンチマークを行いました。
ドットで満たされた最大 3 GB のビッグファイル:
$ head -n3 bigfile
................................................................................
................................................................................
................................................................................
$ du -b bigfile
3025635308 bigfile
bigfileの上に挿入する 2 行のファイル改行:
$ cat newlines
some data
some other data
$ du -b newlines
26 newlines
Dambench v0.08を使用したベンチマーク結果:
猫:
$ dumbbench -- sh -c "cat newlines bigfile > bigfile.new"
cmd: Ran 21 iterations (0 outliers).
cmd: Rounded run time per iteration: 2.2107e+01 +/- 5.9e-02 (0.3%)
リダイレクト付きのsed :
$ dumbbench -- sh -c "sed '1i some data\nsome other data' bigfile > bigfile.new"
cmd: Ran 23 iterations (3 outliers).
cmd: Rounded run time per iteration: 2.4714e+01 +/- 5.3e-02 (0.2%)
インプレース編集でsed :
$ dumbbench -- sh -c "sed -i '1i some data\nsome other data' bigfile"
cmd: Ran 27 iterations (7 outliers).
cmd: Rounded run time per iteration: 4.464e+01 +/- 1.9e-01 (0.4%)
そのため、おそらく中間の一時ファイルを後で元のファイルの場所に移動するため、大きなファイルでインプレース編集を行うと、sedはかなり遅くなるようです (80.6%)。I/O リダイレクションsedを使用すると、 catよりもわずか 11.8% 遅くなります。
これらの結果に基づいて、この回答で提案されているようにcatを使用します。