Linuxのgrepコマンドで正規表現検索するときは、私はいつも「-E」オプションを付けています。このオプションを付けないと基本正規表現(BRE)での検索がされるところ、「-E」オプションを付けることで拡張正規表現(ERE)での検索ができるようになるからです。
そうしたところ、今日、図書館でたまたま立ち読みした本の中から、有益な情報を得ました。立ち読みした本というのは、「エンジニア1年生のためのLinuxコマンドの教科書」です。その157ページ以下に、次のように書かれていました。
正規表現には、POSIXで規定されているもののほかに、「PCRE」(Perl Compatible Regular Expressin・・・プログラミング言語Perl互換の正規表現)などの、拡張されたものもある。そして、grepコマンドに-Pオプションを指定すると、PCREを使って検索ができるようになる。
私にとって、これはちょっとした驚きでした。grepコマンドでも、Perl互換の正規表現が使えるなんて、思ってもいなかったことです。
帰宅してすぐに、我が家のUbuntu PCで試してみました。
まず、ターミナル画面で「man grep」を実行して、マニュアルページを出しました。
そうすると、次のように解説されています(下図のとおり)。

上掲図のとおり、オプションに関する解説中に「正規表現の選択」という項目が設けられていて、
-P, --perl-regexp
パターンを Perl 互換の正規表現 (PCRE) として扱います。 きわめて実験的なものなので、
grep -P を使うと、その機能は実装されていませんという 警告が出るかもしれません。
と、書かれています。
ほっほぉ、「警告が出るかも。」という限定付きながら、「-P」オプションが用意されているんですな。
ならばと思って、
grep -P '\d{3}-\d{4}' hoge.txt
を、実行してみました。
そうしたところ、ちゃんと「〒123-4567」のような文字列とマッチするではありませんか。
\d は、正規表現文字クラス[0-9]の略記法で、プログラミング言語Perl由来です。
これが、-Pオプションを指定することで使えるようになるんですねぇ。へぇ~、知りませんでした。新発見です。
それではまた次の記事で。
goosyun
