鴨川のはりねずみ

[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