LPICで正規表現を勉強したので忘れないように書きます。
grepコマンドを例にまとめます。
grepコマンドについて
書式: grep [option] 検索パターン [ファイル名]
オプション
-i : 大文字小文字を区別しない。
-v : パターンがマッチしない行を表示。
etc...
詳しくはmanコマンドなどで見てください。
主な正規表現
.
任意の一文字。
*
直前の文字の0回以上の繰り返し。
[]
カッコ内のいずれか一文字。
- : 範囲を指定。
^ : カッコの中以外。
^
行頭。
$
行末。
\
エスケープ文字。
^$
空白行を表す。
使用例
例えば以下だと、sample.txt内のaで始まり、任意の数の数字が入り、zで終わる行を検索ができる。
grep '^a[0-9]*z$' sample.txt
正規表現がシェルのメタキャラクタとして解釈されないようにシングルクォーテーションをつけたほうがいいらしい。
拡張正規表現
+
直前の文字の1回以上の繰り返し。
?
直前の文字の0もしくは1回の繰り返し。
|
左右いずれかにマッチ。
{n}
直前の文字のn回の繰り返し。
{n,m}
直前の文字のn回からm回の繰り返し。
使用法
以下のコマンドのどちらかを使用。
・grep -E
・egrep
使用例
x86もしくはx64が含まれる行を検索しています。
grep -E 'x[86|64]'
下は郵便番号の正規表現です。
egrep '[0-9]{3}-[0-9]{4}'
その他
以下を組み合わせることで幅広い表現ができる。
/d
0-9までの数字1文字
/b
英数字とそれ以外の文字の境界
/s
空白文字、タブ、改行コード1文字
/w
単語に使用される任意の文字
()
グループ化
/n (n=数字)
前方参照構成体。前方のグループ化文字列と一致する
*?
できるだけ少ない繰り返しを処理する最初の一致
+?
1回以上。できるだけ少ない繰り返し
など多数あります。
最長一致の原則を知らないとバグを埋め込んでしまう可能性があるので正規表現はあまり積極的には使いたくない。
間違いがありましたらご指摘ください。