我是 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
我是 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
正如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
就这样终止了。