为什么将sed输出重定向到相同的输入文件会使我的机器无响应?

Modified on: Sat, 09 Jun 2018 10:00:53 +0800

我正在尝试sed来替换大文件中的一些关键字(100 MB)。我不知道-i(inplace)选项,所以我的第一次尝试是像这样重定向:

sed 's/original/edited/g' file.log >> file.log

之后发生的事情是我的电脑停止了,几乎没有键盘输入。我尝试了另一个控制台 Ctrl + Alt + F1 但是在慢慢输入用户名后,它也停止了。没有键盘,我唯一的选择是硬件重置机器。登录后,我看到file.log大约是8 GB。

我真的想了解为什么执行该命令能够使系统无响应,以及系统级别是否存在触发警报并终止违规进程的机制?

最佳答案

正如已经说过的那样,>>附加到文件中,所以你的sed命令会在那里读取它刚输出的行,然后输出他们还有一些。如果您想要就地替换文件,>仍然无效,但您知道sed-i选项,这绝对是你想要的。

但是,如果您确定要附加到您正在阅读的文件中,并且只想进行一次传递,请考虑使用sponge moreutils package;

sed 's/original/edited/g' file.log | sponge >> file.log

sponge从stdin读入内存直到EOF,然后将其所有内容转储到stdout,所以sed将命中文件的末尾,停止读取它,关闭它,然后海绵将开始附加它。

作者:,ymbirtt

相关问答

添加新评论