为什么linux重定向会截断文件?

时间:2012-05-30 10:03:07

标签: linux shell command-line

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

hello world

它只是一个'hello world'字符串。如果我使用perl正则表达式:

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

它说:

bye world

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

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

生成的文件为空。为什么?我如何'过滤'文件中的正则表达式?

3 个答案:

答案 0 :(得分:3)

由于重定向,它会在应用程序有机会从中读取之前打开要写入的文件。改为重定向到临时文件,然后重命名。

答案 1 :(得分:3)

perl接受inplace参数-i。有了这个,您可以使用perl程序处理文件并立即将其写回。

答案 2 :(得分:2)

重定向发生在shell解析命令行时。这在执行实际命令之前发生,因此在您有机会阅读之前,您重定向的文件将被覆盖。