我有一个名为“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
生成的文件是空的。 为什么? 我怎么能“过滤器”在文件中的正则表达式?
我有一个名为“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
生成的文件是空的。 为什么? 我怎么能“过滤器”在文件中的正则表达式?
perl
接受参数-i
为就地。 有了这个,你可以处理与Perl程序文件,并立即将其写回。
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.
重定向发生,而你的shell是解析您的命令行。 在执行之前实际的命令,因此您重定向文件,你必须阅读它的机会之前被覆盖会发生这种情况。