[shell] 正規表現にマッチするテキストを抽出
テキストからマッチする部分を取り出すには grep の -o オプションを使うのが簡単です.
デフォルトでは grep は単一行ごとにマッチするかを判定しますが,
-P オプションをつければ複数行でのマッチが可能になります.
一方, grep には複数のマッチ条件を指定する -e オプションがあります.
しかし -P と -e は併用することができません. 正規表現の OR | を使うのが良いと思います.
たとえば HTML 文書から <h1> タグおよび <h2> タグを抜き出すには次のようにします.
grep -Poz '<h1[\s\S]*?</h1>|<h2[\s\S]*?</h2>' index.html