アドレスの入れ子とコマンドのグループ化

{}を用いてアドレスを入れ子にして、「絞り込みをさらに絞り込む」ことができる。これは、{}内にコマンドをいくつも入れてグループ化することにもなる。

アドレス {
  アドレス コマンド
  アドレス コマンド
}
    # 「いちごケーキ」を「ショートケーキ」に変更したいが「きいちごケーキ」はそのままにしたい例
    
    input='1行目 いちごジュース
    2行目 いちごケーキ
    3行目 きいちごケーキ
    4行目 いちごパフェ'
    
    script='
    /きいちご/ ! {
      /ジュース/ s/いちご/ストロベリー/
      /ケーキ/ s/いちご/ショート/
    }'
    
    echo "$input" | sed "$script"
    

    上記は/きいちご/というアドレスにマッチしないものだけ、{}内のスクリプトを適用している。出力はこうなる。

    1行目 ストロベリージュース
    2行目 ショートケーキ
    3行目 きいちごケーキ
    4行目 いちごパフェ