【发布时间】:2020-10-10 11:46:46
【问题描述】:
存在名为 start.txt 的文件。 我正在使用一个 perl 命令,它使用 start.txt 的内容提供修改后的输出,我试图将修改后的输出覆盖到同一个文件
cat start.txt | perl -ne 'print "$1-$1.mp4 Lecture $2 -\n" while /.*\/videos\/(.*?mp4).*?(?<= )(\d+)/g;'> start.txt
由于某种原因,运行上述命令会使文件 start.txt 为空
我的命令没有问题,因为如果我创建一个新文件来重定向输出,例如..
cat start.txt | perl -ne 'print "$1-$1.mp4 Lecture $2 -\n" while /.*\/videos\/(.*?mp4).*?(?<= )(\d+)/g;'> test.txt
这完美地保存了 test.txt 中的预期输出,但我不想创建额外的文件,我需要覆盖现有文件本身。
我在阅读 >| 后尝试了它用于强制覆盖文件,但仍然是同样的问题。
我什至试过| tee start.txt,仍然导致文件变空。
附带说明:我使用了一些 awk 命令,如果我尝试将输出保存/重定向到 awk 函数从中读取文本的文件中,则会导致输出文件为空的相同问题 如果有人问,我也会粘贴 awk 命令,尽管我认为会有一个通用的解决方案
【问题讨论】:
-
我建议不要写入你正在读取的文件,它会破坏文件。
-
看看 perl 的
-i选项。 -
@Cyrus 谢谢我现在明白了这个问题
-
@oguzismail 很好,接受的答案肯定会达到我的目的,谢谢分享