Linux コマンドで目的の情報を抽出するためによく利用されるのが「grep」コマンドです。
正規表現を使いたい
明示的に「-E」オプションを付けます。
「-E」オプションを付けなくても「正規表現」が機能することが多いですが、お勧めはしません。
【例】
正規表現を使って各種リポジトリファイルから「updates」リポジトリを探します。
「[updates]」という文字列を抽出したいのですが、「[」と「]」は「メタ文字(メタキャラ)」なのでエスケープをする必要があります。
[root@SAKURA_VPS yum.repos.d]# pwd |
man コマンドより「-E」オプションについて
-E オプションを付けると、明示的にパターンを正規表現として扱い、POSIX 規定が適用されます。
正規表現の選択 |
man コマンドの「正規表現」の説明部分です。
正規表現 grep は、「基本」正規表現、「拡張」正規表現、「Perl の」正規表現という 3 種類の正規表現文法を扱うことができます。 GNU grep では、「基本」と「拡張」の文法の間で、利用できる機能に違いはありません。 ここでは、拡張正規表現について説明し、基本正規表現との相違については、後で簡単にまとめることにします。 なお、Perl の正規表現は機能がさらに増加しており、 pcresyntax(3) や pcrepattern(3) で詳細に解説されていますが、どのシステムでも利用できるとはかぎりません。 正規表現を構成する基本単位は、1 文字にマッチする正規表現です。 ピリオド . は、任意の 1 文字にマッチします。 文字クラスと角括弧式 (ブラケット式) 角括弧式 は、リスト中の任意の 1 文字にマッチします。 たとえば、正規表現 [0123456789] は任意の数字 1 個にマッチするわけです。 角括弧式の内側に範囲式を置くことができますが、これはハイフンで区切られた 2 つの文字からなっています。 範囲式は、現在使用中のロケールにおける照合順序と 文字集合を使ったときに、その 2 文字の間に並ぶ、その 2 文字を含む任意の 1 文字にマッチします。 たとえば、デフォルトの C ロケールでは、[a-d] は [abcd] と等価です。 角括弧式を伝統的な意味に解釈させたいなら、環境変数 LC_ALL の値を C に設定して、C ロケールを使用するとよいでしょう。 最後に、角括弧式内で使えるように、特定の名前を持つ文字クラスがあらかじめ定義されています。 [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:]。 たとえば、 [[:alnum:]] は [0-9A-Za-z] と同じです。 ただし、後者が C ロケールや ASCII 文字コードに依存しているのに対して、前者はロケールや文字集合に依存しません。 角括弧式の内側では、ほとんどのメタ文字がその特別な意味を持たなくなります。 ] という記号そのものを角括弧式に含めるには、それをリストの先頭に置いてください。 同様に、 ^ という記号そのものを含めるには、それを先頭以外のどこかに置けばよいでしょう。 最後に、- そのものを含めるには、それをリストの最後に置きます。 行頭と行末 (アンカリング) バックスラッシュ付きの特別な表現 シンボル \b は単語の端の空文字列にマッチします。 シンボル \B は単語の端以外の空文字列にマッチします。 シンボル \w は [[:alnum:]] と同じ意味で、シンボル \W は [^[:alnum:]] と同じ意味です。 繰り返し 結合 結果としてできあがる正規表現は、結合対象となる部分表現にそれぞれマッチする 2 つの部分文字列を結合して作られる、どんな文字列にもマッチします。
選択 2 つの正規表現は中置き型演算子の | で繋ぐことができます。 結果としてできあがる正規表現は、どちらかの部分表現にマッチするどんな文字列にもマッチします。 優先順位 表現の 1 つのまとまりを括弧でくくると、その内側の式をこうした優先規則よりさらに優先させることができます。 括弧でくくった部分は、1 つの部分表現になるのです。 後方参照と部分表現 基本正規表現と拡張正規表現 元々の egrep は、{ をメタ文字としてサポートしていませんでしたし、{ の代わりに \{ をメタ文字としてサポートする egrep の実装も存在します。 ですから、移植を考慮したスクリプトでは、grep -E のパターンで { を使用することは避けるべきです。 { という記号そのものにマッチさせたいときは [{] を使うとよいでしょう。 GNU の grep -E は、 { が繰り返し回数指定の始まりとして意味をなさない場合、それを特殊文字ではないと見なし、従来の用法のサポートを試みます。 たとえば、コマンド grep -E ‘{1’ は、正規表現に文法エラーがあると報告するかわりに、2 文字からなる文字列 {1 を検索するのです。 この動作は、POSIX.2 によって拡張として認められていますが、 移植を考慮したスクリプトでは使用しない方がよいでしょう。 |
POSIX とは
POSIX(ポシックス、ポジックス、英: Portable operating system interface)は、各種UNIXを始めとする異なるオペレーティングシステム (OS) 実装に共通のアプリケーションプログラミングインタフェース (API) を定め、移植性の高いアプリケーションソフトウェアの開発を容易にすることを目的としてIEEEが策定したAPI規格である。POSIXという名前はリチャード・ストールマンがIEEEに提案したものである。末尾の「X」はUNIX互換OSに「X」の字がつく名前が多いことからつけられた。ISO/IEC JTC 1/SC 22でISO/IEC 9945として国際規格になっている。
https://ja.wikipedia.org/wiki/POSIX
コメント