入力はアドレスに関係なくパターンスペースにまずコピーされる
アドレスは、入力行がパターンスペースにコピーされた後、それにコマンドを適用するかを決める条件のことであって、入力行をパターンスペースにコピーするかを決める条件ではない。
この流れの理解のために、下記のように「2」という2行目を指定するアドレスと「d」という削除するコマンドのスクリプトをみると、
input='1行目
2行目
3行目'
echo "$input" | sed '2 d'
出力はこうなる。
1行目
3行目
- まず、入力の1行目がパターンスペースにコピーされる。
- アドレスが「2行目」という条件なので、現在のパターンスペースにはdコマンドは適用されない。ここでいう「2行目」という条件は「パターンスペース内の2行目」ではなく、パターンスペースの元になった直近の入力行が2行目という意味。パターンスペースはNコマンドなどで複数行になり得る。
- ここでスクリプト末尾の段階に達したので、残ったパターンスペースの内容「1行目」が標準出力となる。
- そして次のサイクルに移る。
- つづいて、入力の2行目がパターンスペースにコピー(上書き)される。
- これはアドレスに一致したので、現在のパターンスペースにdコマンドが適用され、削除される。
- スクリプト末尾の段階で、パターンスペースに何も残っていないので出力はない。
- そして次のサイクルに移る。3行目は1行目と同様。
上記のように、アドレスに関わらず入力行はパターンスペースにコピーされる。アドレスはその後でコマンドが適用されるか否かの条件になる。