6.8 特定範囲の行を抽出する

開始パターンにマッチする箇所から終了パターンにマッチする箇所までの全ての行を抽出したい。または、n行目からm行目までの全ての行を抽出したい。

..演算子、もしくは、...演算子を使う。
..演算子は、開始パターン(左オペランド)にマッチする部分文字列が読み込まれた行の中にあると、真になる。そして、その同じ行の中に終了パターン(右オペランド)にマッチする部分文字列があるかどうかチェックする。

while(<>) {
  if (/BEGIN PATTERN/ .. /END PATTERN/) {
    # BEGIN PATTERNにマッチする箇所から
    # END PATTERNにマッチする箇所まで、全ての行を処理する。
  }
}

while (<>) {
  if (FIRST_LINE_NUM .. LAST_LINE_NUM) {
    # 開始行から終了行までの全ての行を処理する
  }
}

...演算子は、開始パターンにマッチした行では、その同じ行の中に終了パターンがあるかどうかチェックしない。その代わりに、続いて読み込まれた行の中に終了パターンにマッチする部分文字列があるかどうかチェックする。

while(<>) {
  if (/BEGIN PATTERN/ ... /END PATTERN/) {
    # BEGIN PATTERNにマッチする箇所から
    # END PATTERNにマッチする箇所(別の行)まで、全ての行を処理する。
  }
}

while (<>) {
  if (FIRST_LINE_NUM ... LAST_LINE_NUM) {
    # 開始行から終了行までの全ての行(境界行は含まない)を処理する
  }
}