2

我有一个名为“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

结果文件为空。为什么?以及如何在文件上“过滤”正则表达式?

4

3 回答 3

3

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

于 2012-05-30T10:06:15.117 回答
3

由于重定向,它会在应用程序有机会读取文件之前打开文件进行写入。而是重定向到一个临时文件,然后重命名它。

于 2012-05-30T10:04:48.600 回答
2

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

于 2012-05-30T10:04:46.787 回答