kent備忘ログ

お仕事と趣味生活と

Linuxのシェルと正規表現のメタキャラクタについて

Linuxの学習の中でシェルと正規表現のメタキャラクタについて混同したので、整理も兼ねて記事に起こしてみました。

メタキャラクタを使用することで、grepやfindコマンドで検索する際、効率よくファイルやディレクトリ、文字列を検索することができます。

正規表現で使用されるメタキャラク

  • 位置を特定する文字

    記号 意味
    ^ 行頭を表す
    $ 行末を表す
    < 単語の頭
    > 単語の末尾
  • グループ化

    記号 意味
    . 任意の一文字を指定(改行文字を除く)
    [ ] []の中のいずれか一文字を意味する
    [-] (範囲指定)-の中のいずれか一文字を意味する (ex.a-z)
    [^] ^より後続の文字が含まれないことを意味する
    | 左右のいずれかの文字列(拡張正規表現)
  • 繰り返しを意味する文字

    記号 意味
    * 直前の文字の0回以上の繰り返しを意味する(最長一致)
    + 直前の文字の1回以上の繰り返し(最長一致)(拡張正規表現)
    ? 直前の文字の0回もしくは1回の繰り返し(拡張正規表現)
  • エスケープ文字

    記号 意味
    \ (バックスラッシュ)正規表現の記号をエスケープする
  ^h  hで始まっている行
  e$  eで終わっている行
  h.ge  hとgの間に1文字入っている
  [ho]ge  hもしくはoに続く(hge, oge)  
  [^ho]ge  hもしくはbで始まらず、geと続くもの(例.age, bgeなど)

シェルで使用されるメタキャラクタ(意味合いが変わるもの)

メタキャラク 説明
$ 変数
* 0文字以上の文字にマッチ
' 囲まれた部分を文字列とみなす
" 囲まれた部分を文字列とみなす( $ \ ` / " は除く)
` 囲まれた文字列をコマンドとみなし、その実行結果を文字列として返す
  ※正規表現として * を使用 
  a*  の検索結果 = a, aa, aaa, aaa, ...  (無制限にマッチした検索結果を表示)

  ※メタキャラクタとして * を使用
  a*  の検索結果 = abc, abc123, aabbccなどあらゆるaから始まる文字列にマッチ