我有一个名为“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
生成的文件为空。为什么?我如何'过滤'文件中的正则表达式?
答案 0 :(得分:3)
由于重定向,它会在应用程序有机会从中读取之前打开要写入的文件。改为重定向到临时文件,然后重命名。
答案 1 :(得分:3)
perl
接受inplace参数-i
。有了这个,您可以使用perl程序处理文件并立即将其写回。
答案 2 :(得分:2)
重定向发生在shell解析命令行时。这在执行实际命令之前发生,因此在您有机会阅读之前,您重定向的文件将被覆盖。