つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

grepコマンドでPerl互換の正規表現(PCRE)が使える

 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」を実行して、マニュアルページを出しました。
 そうすると、次のように解説されています(下図のとおり)。

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