正規表現とは、文字列の集合を一つの文字列で表現する方法です。
正規表現を覚えていると、エディタでの検索時(grepなど)やLinuxコマンド操作での検索作業が格段に楽になります。覚えておいて決して損はない知識の一つです。
正規表現の繰り返し表現
記号 | 説明 |
---|---|
* | 0回以上の繰り返し |
+ | 1回以上の繰り返し |
? | 0 or 1 |
. | 任意の1文字 |
正規表現の基本的な使用例
正規表現 | 意味 | 使用例 | 結果 |
---|---|---|---|
.* | 任意の1文字を0回以上繰り返す | .*A.* | BBBABB、BBBA、ABB、Aなど |
.+ | 任意の1文字を1回以上繰り返す | A.+ | ABCD、AAA、AEなど |
c* | cが0回以上続く | c*A | cccA、ccA、cA、Aなど |
c+ | cが1回以上続く | C+A | ccA、cAなど |
c? | cが0~1回 | MAC ?OS | MACOS、MAC OS |
c|d | c or d | (A|B)C | AC、BC |
(c|d)? | c or dが0~1回 | (A|B)?C | AC、BC、C |
[cde] | []内のどれか1文字 | [cde]A | cA、dA、eA |
[0-9A-Za-z] | 数字かアルファベット1文字 | [0-9A-Za-z] | 0、9、A、Z、a、zなど |
[]cde] | ]cdeの内どれか1文字 | []cde]A | ]A、cA、dA、eA |
[.*] | . or *の内どれか1文字 | A[.*]B | A.B、A*B |
[^0-9] | 0~9以外の1文字 | [^0-9a-z]A | AA、BA、_Aなど |
^c | 先頭がc | ^AC | ACbcd、ACEFG、AC123など |
^[0-9][0-9] | 先頭が00~99 | ^[0-9][0-9] | 00ABGT、48tgh、917、1747 |
c$ | 最後がc | AC$ | 1560AC、gaACAC、BVFACなど |
^$ | 空 | ^$ | 空のみ |
^.*$ | 全ての文 | ^.*$ | 全ての文 |
c\{n\} | cがn文字続く | A\{3\} | AAA |
c\{n,\} | cがn文字以上続く | A\{3,\} | AAA、AAAA、AAAAAなど |
c\{n,m\} | cがn回からm回 | A\{3,4\} | AAA、AAAA |
\(バックスラッシュ) | 次にくる文字をメタキャラではなく通常の文字として処理する | touch \.\.abc\.\. | ..abc..というファイルを生成 |
\w | 英数字かアンダーバーを表す(a~z,A~Z,0~9) | \w+ | abc、a001、001 |
\d | 数字を表す(0~9) | \d+ | 1、12、123、001 |
正規表現の応用的な使用例
用途 | 正規表現 | Linuxでの使用例 |
---|---|---|
電話番号(全般:ハイフン付)に一致する正規表現 | ^[0-9]+-[0-9]+-[0-9]+$ | $ grep -EHn ^[0-9]+-[0-9]+-[0-9]+$ test6.txt ※オプション -Eで拡張正規表現を使用 オプション -Hで検索結果にファイル名を付けて表示 オプション -nで検索結果に行番号を付けて表示 |
携帯番号(ハイフン付)に一致する正規表現 | ^'(090|080|070)-[0-9]{4}-[0-9]{4}'$ | $ grep -EHn ^'(090|080|070)-[0-9]{4}-[0-9]{4}'$ test6.txt |
メールアドレスと一致する正規表現 | ^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$ | $ grep -EHn ^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$ test6.txt |
郵便番号(ハイフン付)と一致する正規表現 | ^[0-9]{3}-[0-9]{4}$ | $ grep -EHn ^[0-9]{3}-[0-9]{4}$ test6.txt |
ファイル名から数値だけを抜き出す | ''s/^\([0-9]*\)\.txt/\1/' | $ echo 19.txt | sed 's/^\([0-9]*\)\.txt/\1/' 19 ※数字を表す「[0-9]*」を「\(」と「\)」で囲み、「\1」だけにして、数字の19だけが出力される |
正規表現で出来ないこと
- 複数ファイルへの一斉変換
- ファイルの一斉リネーム
- 番号を繰り上げての置換