筆者が正規表現を勉強しているとき、grepコマンドで使うEオプションがどういったものなのか分からずに使用していました。とりあえずうまく動作しているからと、その意味を知らずに今までいました。
今回、Eオプションについて学習したので私の備忘録として記録しておきます。ぜひ読んでいただけると嬉しいです!
grepコマンドとは
grepコマンドは正規表現による検索を行ってくれるコマンドです。標準入力またはファイルから検索します。
grepはgrep [option] 正規表現 [file]
で使用します。オプションは複数ありますが、今回はEオプションを扱います。以下はgrepを使用した例です。
まず写真のような内容のテキストファイルを用意します。
そしてこのファイルに対してgrepコマンドで検索します。
[a-zA-Z]は英小文字・英大文字にマッチする正規表現です。その後ろにある「+」は1回以上の繰り返しを表します。よって"Hello"
にマッチします(出力はマッチした行です)。
Eオプションについて
EオプションはERE(Extended Regular Expressions)を使えるようにします。EREとはBRE(Basic Regular Expressions)の機能を拡張したものです。
POSIX標準コマンドはPOSIXが定義したEREとBREの種類があります。BREは基本正規表現、EREは拡張正規表現といいます。
BREの上位互換的なのがEREだと思っておくと良いです。BREでキャプチャをするには\(\)
とエスケープしなくてはいけません。しかし、EREでは()
とそのままカッコを書くだけで使えます。
Linux版とMac OS版は+, ?
をエスケープ\+, \?
すれば使用することができます。
このようにBREとEREでは正規表現の文法が異なったり、+
, ?
(POSIX版のみ)が使えなかったりします。
grepコマンドやsedコマンドを使う際は、-Eを指定してERBを使うことをおすすめします。理由としてはエスケープしなくても()
、{}
、+
、?
などを使用できるため直感的に記述することができ、わかりやすいからです。
おわりに
Eオプションを使うとどうなるのかということについて解説しました。
BREとEREを学習してBREよりEREの方が使いやすいのでは?と個人的には思っています。もし、BREの方を使うべきだ!と思う方がいたら、ぜひその理由を教えていただけると嬉しいです。
最後までご覧いただきありがとうございました。
コメント