4

誰かがなぜこれが起こっているのか説明できますか?

これは予想されます:

$ echo -e "foo\nbar" | sed -n 'h; x; p'
foo
bar

ホールド スペースにすべての行を配置し、ホールド スペースとパターン スペースを交換してから、パターン スペースを出力すると、すべての行が出力されます。では、なぜ次のように違うのでしょうか。

$ echo -e "foo\nbar" | sed -n 'h; d; x; p'

スワップする前にパターンスペースを削除したので、そうではないと思ったので、保存された行はとにかくパターンスペースに戻す必要があります。の後に空いているはずのホールドスペースx;ですよね?パターンスペースを削除してからスワップします。保存した行はどこに行きますか?

4

2 に答える 2

5

を使用するdと、パターン スペースがクリアされ、次の行が読み込まれ、スクリプトの最初から処理が開始されます。したがって、実際にはxandのpステップに到達することはなく、ホールド スペースにコピーして削除するだけです。

于 2012-05-16T08:25:52.633 に答える
4

の次の行に関連していると思いますman sed

d パターンスペースを削除します。次のサイクルを開始します。

以下は期待どおりに機能します。

$ echo -e "foo\nbar" | sed -n 'h; s/.*//; g; p'
foo
bar

お騒がせして申し訳ありません。

于 2012-05-16T08:25:27.650 に答える