为什么一个linux重定向截断文件?(Why a linux redirect truncates

2019-07-29 15:42发布

我有一个名为“test.txt的”这样的文件:

hello world

它是,只是一个“世界你好”字符串。 如果我使用一个Perl的正则表达式:

perl -pe "s/hello/bye/g" test.txt

它说:

bye world

但如果我尝试到该文件重定向到本身:

perl -pe "s/hello/bye/g" test.txt > test.txt

生成的文件是空的。 为什么? 我怎么能“过滤器”在文件中的正则表达式?

Answer 1:

perl接受参数-i为就地。 有了这个,你可以处理与Perl程序文件,并立即将其写回。



Answer 2:

It opens the file for writing due to the redirect before the application gets a chance to read from it. Redirect to a temporary file instead, then rename it after.



Answer 3:

重定向发生,而你的shell是解析您的命令行。 在执行之前实际的命令,因此您重定向文件,你必须阅读它的机会之前被覆盖会发生这种情况。



文章来源: Why a linux redirect truncates the file?