sed:-i 和 > 文件有什么区别?

sed:-i 和 > 文件有什么区别?

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

相关内容