うまいぼうぶろぐ

linuxとhttpdとperlのメモ

grepでの正規表現の使い方memo

別にgrepじゃなくてもいいけども。
最近カテゴリが適当すぎると思うけど気にしない。

  • . : 任意の一文字
  • * : 直前の正規表現の0回以上の繰り返し
    • '.*' - 任意の文字列
  • ^ : 行頭
  • $ : 行末
    • '^$'ってやると空行(改行のみの行)がマッチ
  • [ ] : [ ]内の文字のどれか
    • '[a-z]'みたいに範囲指定もできる
  • [^ ] : [ ]内の^以降の文字以外
    • '[^a-z]'とすると英小文字以外に

この辺りまではまぁ覚えてるので大丈夫。

  • ? : 直前の正規表現が0回か1回
  • + : 直前の正規表現の1回以上の繰り返し
  • {n} : 直前の正規表現のn回繰り返し
  • {n,m} : 直前の正規表現のn回以上m回以下の繰り返し
    • {n,} n回以上
    • {,m} m回以下
  • \< : 単語の先頭
  • \> : 単語の末尾
  • \w : 数字とアルファベット(1文字?)
  • \W : 数字とアルファベット以外 = 記号と空白?
  • | : 正規表現のor

この辺りも覚えておかなくては。{n}とかは拡張正規表現だったような。grep -E か egrepを使う。

エスケープ

特殊文字をそのまま検索したい時とかは\を前につける。

$ grep '\[0-9]' hoge.txt           # '[0-9]'の文字列を検索
$ grep -E '(\[0-9]){2}' hoge.txt   # '[0-9]'が2回続く文字列を検索