我做了一些基准测试来比较使用 sed 和就地编辑(建议 here)和 cat(建议 here)。
~3GB bigfile 用点填充:
$ head -n3 bigfile
................................................................................
................................................................................
................................................................................
$ du -b bigfile
3025635308 bigfile
文件 newlines 在 bigfile 上插入两行:
$ cat newlines
some data
some other data
$ du -b newlines
26 newlines
使用dumbbench 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%。
根据这些结果,我将按照this answer 中的建议使用 cat。