1

私は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
4

1 に答える 1

3

paulsm4で指摘されているように、反復ごとにメモリを割り当てる無限ループを作成しました。最初の例は2番目の例の遅いバージョンです。印刷のため、最終的には。でエラーが発生しcouldn't re-allocate memoryます。

それを分解しましょう:

1h
1!H
$!d

すべての入力をホールドスペースに保存しますd。次のサイクルが開始されることに注意してください。

最後の2つのコマンドx; Dは、最後の行に達したときにのみ実行されます。これは、これらが実行される直前の状況です。

PS: wtf
HS: hell\nnautanki\nwtf

xパターンスペースが空ではないため、それらを交換し、サイクルをD削除して再開します。意志は新しいパターンスペースで実行され、結果は次のようになりますhell\n1!H

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

つまり、反復ごとにメモリ使用量がわずかに増加します。

2行の入力では、状況は少し異なります。

PS: nautanki
HS: hell\nnautanki

になる:

PS: nautanki
HS: nautanki

など、無限に。

1行の入力で次のようになります。

PS: hell
HS: hell

それで:

PS: 
HS: hell

そして、終了します。

于 2012-09-24T09:01:58.750 に答える