我是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
答案 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
因此终止。