我知道这> 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
$