我之前已经这样做过,期望在适当的位置改变文件,类似的事情$ tr '\t' ',' <file.txt >file.txt
,显然重定向会在读取>
文件之前截断文件;<
如何就地更改文件而不截断/删除它?
答案1
你不能。重定向>
运算符将要创建一个新的空文件作为管道的一部分。似乎这样做的工具(如sed --in-place
)正在创建一个新文件,写入它,然后将新文件移动到旧文件的位置:
$ ls -i file; sed --in-place 's/foo/bar/' file; ls -i file
266110 file
262180 file