ホールドバッファとパターンバッファの内容を交換するとき x が何をするのか理解できません。ホールドまたはパターンの古いデータが削除されるように、ホールドとパターン間でデータを交換しますか?結局何が起こったのですか?
答え1
おそらくこれを説明する最良の方法は、のようなより冗長な言語に翻訳することですperl
。では、sed
ホールドスペースは空行で初期化された静的変数と同じですが、パターンスペースはsed
入力の各行に順番に割り当てられる変数です。 。それは次のとおりです。
$hold_space = "\n";
LINE: while ($pattern_space = <>) {
<sed commands go here>
print $pattern_space; # unless -n option is passed
}
x
パターンを変えて空間を維持すれば、まさにそのことになります。
($pattern_space, $hold_space) = ($hold_space, $pattern_space);
予約済みスペースには、パターンスペースに含まれる内容(他のコマンドで変更しない限り、現在の入力行)が含まれます。そして、パターン空間は保持空間に含まれるすべてに置き換えられるため、出力は次の入力行が処理される前に最後に行われます(パターン空間は新しい入力行に割り当てられます)。
パターン空間があなたが扱っているものです。したがって、その中にあるデータで何でもするには、その中にあるデータが必要です。保管スペースは、2行の入力を処理する間にデータを保管する必要がある場合に使用できる記憶域です。
g
予約済みスペースをパターンスペースに入れますが、元のパターンスペースは失われます。x
、予約済みスペースに古いパターンスペースを保持します。たとえば、予約済みスペースを編集するには、x;s/.../.../;x
予約済みスペースを一部置き換えることができます。