機能するもの
この sed スクリプトは意図したとおりに機能します。
$ echo -e "2\n1\n4\n3" | sed -n 'h; n; G; p'
1
2
3
4
一度に入力行のペアを取り、行を交換します。ここまでは順調ですね。
機能しないもの
私が理解していないのは、sed の自動印刷を使用できない理由です。sed は各実行サイクルの最後にパターン スペースを自動的に出力するため (抑制されている場合を除く)、なぜこれは同等ではないのでしょうか?
$ echo -e "2\n1\n4\n3" | sed 'h; n; G'
2
1
2
4
3
4
コードが言うことは次のとおりです。
- 入力行が保留スペースにコピーされます。
- 次の行がパターン空間に読み込まれます。
- ホールド スペースはパターン スペースに追加されます。
- 実行サイクルの終わりに達したため、パターン スペース (行 1 + 改行 + 行 2) が自動的に出力されます。
明らかに、私は間違っています...しかし、理由がわかりません。この 2 番目の例が壊れる理由と、正しい結果を得るために印刷の抑制が必要な理由を説明できる人はいますか?