Sed递归运行,无法重新分配内存

时间:2012-09-24 07:10:35

标签: sed

我是sed命令的新手.....我正在尝试一些命令,但它总是进行一些递归.....并且在某些情况下它说“无法重新分配内存”

无限递归输出:

echo -e 'hell\nnautanki\nwtf' | sed -e '1h;1!H;$!d' -e 'x;l;D'

内存重新分配问题:

echo -e 'hell\nnautanki\nwtf'| sed -e '1h;1!H;$!d' -e 'x;D'

出错:

sed: couldn't re-allocate memory

1 个答案:

答案 0 :(得分:3)

paulsm4 所述,你创建了一个无限循环,在每次迭代时分配内存,第一个例子只是第二个的慢速版本,因为打印,它最终也会couldn't re-allocate memory出错。

让我们分解一下:

1h
1!H
$!d

将所有输入保存到保留空间,请注意d开始下一个周期。

最后两个命令x; D仅在到达最后一行时执行。这就是在这些情况出现之前的情况:

PS: wtf
HS: hell\nnautanki\nwtf

x交换它们,D删除hell\n并重新启动循环,因为模式空间不为空。 1!H将在新模式空间上执行,结果为:

PS: nautanki\nwtf
HS: wtf\nnautanki\nwtf

即。每次迭代时内存使用量略有增加。

有两行输入,情况有点不同:

PS: nautanki
HS: hell\nnautanki

变为:

PS: nautanki
HS: nautanki

等等无限。

一行输入结果为:

PS: hell
HS: hell

然后:

PS: 
HS: hell

因此终止。