bokumin

bokumin's net

Linux 正規表現(Regex)チートシート

Linux Regular Expression(Regex) Cheat Sheet

Linuxの正規表現をサクっとチートシートにしてみました。参考にしてもらえれば幸いです。

特殊文字

記号説明使用例(一致する文字)
.任意の1文字にマッチa.c → abc, adc, a1c など
^行の先頭にマッチ^abc → 「abc」で始まる行
$行の末尾にマッチabc$ → 「abc」で終わる行
*直前の文字の0回以上の繰り返しab*c → ac, abc, abbc, abbbc…
+直前の文字の1回以上の繰り返しab+c → abc, abbc, abbbc…
?直前の文字の0回または1回の出現ab?c → ac, abc
\次の文字をエスケープ(特殊文字を通常の文字として扱う)\. → ドット文字そのもの


文字クラスと範囲

記号説明使用例(一致する文字)
[abc]括弧内のいずれか1文字にマッチ[abc] → a, b, または c
[^abc]括弧内以外の任意の1文字にマッチ[^abc] → a, b, c 以外の任意の文字
[a-z]範囲指定(a から z の小文字)[a-z] → 小文字のアルファベット1文字
[A-Z]範囲指定(A から Z の大文字)[A-Z] → 大文字のアルファベット1文字
[0-9]範囲指定(0 から 9 の数字)[0-9] → 任意の数字1文字


POSIX 文字クラス

記号説明使用例
[:alnum:]英数字(アルファベットと数字)[[:alnum:]] → a-z, A-Z, 0-9 のいずれか
[:alpha:]アルファベット[[:alpha:]] → a-z, A-Z のいずれか
[:ascii:]ASCII文字[[:ascii:]] → ASCII文字セットのいずれか
[:blank:]空白(スペースとタブ)[[:blank:]] → スペースまたはタブ
[:cntrl:]制御文字[[:cntrl:]] → 制御文字のいずれか
[:digit:]数字[[:digit:]] → 0-9 のいずれか
[:graph:]表示可能な文字(スペースを除く)[[:graph:]] → スペース以外の表示可能な文字
[:lower:]小文字[[:lower:]] → a-z のいずれか
[:print:]印字可能な文字(スペースを含む)[[:print:]] → スペースを含む印字可能な文字
[:punct:]句読点[[:punct:]] → 句読点記号のいずれか
[:space:]空白文字(スペース、タブ、改行など)[[:space:]] → 空白文字のいずれか
[:upper:]大文字[[:upper:]] → A-Z のいずれか
[:word:]単語構成文字(英数字とアンダースコア)[[:word:]] → a-z, A-Z, 0-9, _ のいずれか
[:xdigit:]16進数の数字[[:xdigit:]] → 0-9, a-f, A-F のいずれか


繰り返し指定

記号説明使用例(一致する文字)
{n}直前の文字をちょうどn回繰り返すa{3} → aaa
{n,}直前の文字をn回以上繰り返すa{2,} → aa, aaa, aaaa…
{n,m}直前の文字をn回以上m回以下繰り返すa{2,4} → aa, aaa, aaaa


選択と代替

記号説明使用例(一致する文字)
選択(OR演算子)cat|dog → 「cat」または「dog」
()グループ化と部分式の作成(cat|dog)s → 「cats」または「dogs」


エスケープシーケンスと特殊表現

記号説明使用例(一致する文字)
\d数字一文字にマッチ([0-9]と同等)\d{3} → 3桁の数字
\D非数字にマッチ([^0-9]と同等)\D+ → 1文字以上の非数字
\w単語構成文字(英数字とアンダースコア)にマッチ([a-zA-Z0-9_]と同等)\w+ → 1文字以上の単語構成文字
\W非単語構成文字にマッチ([^a-zA-Z0-9_]と同等)\W+ → 1文字以上の非単語構成文字
\s空白文字にマッチ(スペース、タブ、改行等)\s+ → 1文字以上の空白文字
\S非空白文字にマッチ\S+ → 1文字以上の非空白文字
\b単語境界にマッチ\bcat\b → 単語「cat」(caterpillarなどは含まない)
\B非単語境界にマッチ\Bcat\B → 「cat」が単語の中間にある場合
\n改行文字line\n → 「line」の後に改行がある場合
\tタブ文字column\t → 「column」の後にタブがある場合
\rキャリッジリターン\r\n → Windows形式の改行
\fフォームフィード
\aベル(警告音)
\eエスケープ文字
\cX制御文字(Xは任意の文字)\cM → Control+M(改行)
\0NULL文字
\xhh16進数コードhhの文字\x41 → A
\Ohh8進数コードhhhの文字\101 → A


バックリファレンス

記号説明使用例
\1, \2前の括弧で囲まれたパターンを参照(abc)\1 → abcabc
\k<name>名前付きキャプチャグループの参照(Perl互換)(?<word>abc)\k<word> → abcabc


Unicode と高度な表現(主にPerl互換正規表現で利用可能)

記号説明使用例(一致する文字)
\u4桁の16進数で指定したUnicode文字\u00A9 → © (著作権記号)
\U8桁の16進数で指定したUnicode文字\U0001F600 → 😀 (笑顔の絵文字)
\p{プロパティ}指定したUnicodeプロパティを持つ文字\p{Greek} → ギリシャ文字
\P{プロパティ}指定したUnicodeプロパティを持たない文字\P{Greek} → ギリシャ文字以外
\XUnicode結合文字シーケンス


先読み・後読み(Perlなどの拡張正規表現で利用可能)

記号説明使用例(一致する文字)
(?=pattern)肯定先読み(後ろにpatternがある場合にマッチ)foo(?=bar) → 「foobar」の「foo」部分
(?!pattern)否定先読み(後ろにpatternがない場合にマッチ)foo(?!bar) → 後ろに「bar」がない「foo」
(?<=pattern)肯定後読み(前にpatternがある場合にマッチ)(?<=foo)bar → 「foobar」の「bar」部分
(?<!pattern)否定後読み(前にpatternがない場合にマッチ)(?<!foo)bar → 前に「foo」がない「bar」


その他の特殊構文

記号説明使用例
(?:pattern)非キャプチャグループ(?:abc)+ → 「abc」の1回以上の繰り返し
(?#comment)コメントabc(?#これはコメント)def
(?imsxUJun)オプション(フラグ)の設定(?i)abc → 大文字小文字を区別せず「abc」にマッチ


正規表現のオプション(フラグ)

記号説明使用例
/pattern/i大文字小文字を区別しない/cat/i → 「cat」「Cat」「CAT」などにマッチ
/pattern/gグローバルマッチ(すべての一致を検索)/a/g → すべての「a」にマッチ
/pattern/mマルチライン(^$が各行の先頭と末尾にマッチ)/^start/m → 各行の先頭の「start」にマッチ
/pattern/sドット(.)が改行文字にもマッチ/.*/s → 改行を含むすべての文字にマッチ
/pattern/x拡張モード(空白を無視し、コメントを許可)/pattern # コメント/x
/pattern/uUnicode対応/\p{Script=Greek}/u → ギリシャ文字にマッチ


sed や vim などでの置換操作に特有の記号

記号説明使用例
&マッチした文字列全体を表す(置換時)s/word/(&)/g → 「word」を「(word)」に
\u次の文字を大文字に変換(置換時)s/\b\w/\u&/g → 各単語の先頭を大文字に
\l次の文字を小文字に変換(置換時)s/WORD/\l&/ → 「WORD」を「wORD」に
\U以降のすべての文字を大文字に変換(置換時)s/word/\U&/ → 「word」を「WORD」に
\L以降のすべての文字を小文字に変換(置換時)s/WORD/\L&/ → 「WORD」を「word」に
\E\Uまたは\Lの効果を終了s/word/\U&\Eed/ → 「word」を「WORDed」に


Linux ツールごとの正規表現の違い

ツール正規表現タイプ注意点
grepPOSIX基本正規表現+, ?, {}などは\でエスケープする必要がある
grep -E/egrepPOSIX拡張正規表現+, ?, {}などを直接使用可能
grep -PPerl互換正規表現\d, \w, \s, 先読み・後読みなどが使用可能
sed POSIX基本正規表現+, ?, {}などは\でエスケープする必要がある
sed -EPOSIX拡張正規表現+, ?, {}などを直接使用可能
awk独自の拡張正規表現AWK固有の構文と制限がある
perlPerl互換正規表現最も強力で多機能な正規表現をサポート

注意点

  • 基本正規表現(BRE)と拡張正規表現(ERE)では、特殊文字のエスケープが異なる
  • Unicode関連の機能はすべてのツールでサポートされているわけではなく、主にPerl互換正規表現(PCRE)を使用するツールでのみ使用可能
  • 利用するLinuxディストリビューションやツールのバージョンによって、サポートされる機能が異なる場合あり

まとめ

普段あまり使わないものは忘れがちで、探すのに手間取り、かえって時間がかかってしまうことが多々・・

おわり