シェルスクリプトでの正規表現は難しくて、疎かになっていないでしょうか?
便利そうだけど理解が出来ずに、手を付けずにここまで来たあなたの為に、今回シェルスクリプトでの正規表現についてまとめます。
正規表現を極めることでシェルスクリプトの質が上がる事は間違いありません。
理解しやすいように表にしてまとめたり、シェルスクリプトの例文を使用して現役エンジニアの筆者が教えます。
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
今まで避けてきた正規表現を極めて、効率よいシェルスクリプトを作成できるようになりましょう!
シェルスクリプトで正規表現についての詳細解説
シェルスクリプトの正規表現の種類について
シェルスクリプトの正規表現について2種類あります。
- 基本正規表現
- 拡張正規表現
基本正規表現と拡張正規表現とどちらを学べば良いでしょうか?
結論は拡張正規表現を学べば良いです。少し違いがあるだけで基本はコマンドにオプションをつけるだけで拡張正規表現になるので楽です。
基本の方を学びたくなる気持ちもわかりますが、対応していない文字などもあるので拡張正規表現だけでも問題ありません。
正規表現で重要になってくるメタ文字とは
また正規表現を使用するにあたり重要になってくるのが、メタ文字です。
このメタ文字がややこしいので、表でわかりやすいようにまとめます。
正規表現はシェルスクリプトのどのような所で使用されるのか
シェルスクリプトでよく正規表現が使用されるのは主に「文字検索」と「置換」です。あとは条件分岐のifでたまに正規表現が出てくるくらいです。
シェルスクリプトの「文字検索」で使用されるコマンドは主に「grep」コマンドです。
シェルスクリプトの「置換」で使用されるコマンドは主に「sed」コマンドです。
シェルスクリプトで正規表現を使う方法
ではシェルスクリプトの正規表現を実際に見ていきます。
一気に見るとややこしいので、正規表現に使用するメタ文字を用途に分けてまとめます。
正規表現の文字や文字の位置を示すメタ文字
正規表現の文字や文字の位置を示すメタ文字
基本正規表現メタ文字 | 拡張正規表現メタ文字 | 効果 |
---|---|---|
. | . | 何かしらの1文字 |
^ | ^ | 最初の文字 |
$ | $ | 最後の文字 |
[] | [] | 限定文字指定 |
[^] | [^] | 限定文字以外 |
実際のメタ文字を使用した正規表現例
基本正規表現 | 拡張正規表現メタ文字 | 抽出例 |
---|---|---|
‘roo.’ | ‘roo.’ | root,rooa,roob |
‘^root’ | ‘^root’ | root,roota,rootab |
‘nologin$’ | ‘nologin$’ | aaaanologin,bbbnologin |
‘roo[stu]’ ‘roo[s-u]’ ‘roo[1-3]’ | ‘roo[stu]’ ‘roo[s-u]’ ‘roo[1-3]’ | root,roos,roou root,roos,roou roo1,roo2,roo3 |
‘roo[^abc]’ | ‘roo[^abc]’ | root,rood,rooe,roof |
正規表現の文字の繰り返しを示すメタ文字
正規表現の文字の繰り返しを示すメタ文字
基本正規表現メタ文字 | 拡張正規表現メタ文字 | 効果 |
---|---|---|
* | * | 直前の文字の0回以上の繰り返し |
無し | + | 直前の文字の1回以上の繰り返し |
無し | ? | 直前の文字の0回もしくは1回の繰り返し |
\{m\} | {m} | 直前の文字のm回の繰り返し |
\{m,\} | {m,} | 直前の文字のm回以上の繰り返し |
\{m,n\} | {m,n} | 直前の文字のm回以上n回以下の繰り返し |
実際に繰り返しのメタ文字使用例
基本正規表現メタ文字 | 拡張正規表現メタ文字 | 効果 |
---|---|---|
‘roo*t’ | ‘roo*t’ | rot,root,rooot,rooota,roootab |
無し | ‘roo+t’ | root,rooot,rooota,roootab |
無し | ‘roo?t’ | rot,root,roota,rootab |
‘ro\{2\}t’ | ‘ro{2}t’ | root,roota,rootab |
‘ro\{1,\}t’ | ‘ro{1,}t’ | rot,root,rooot,rooota,roootab |
‘ro\{1,2\}t’ | ‘ro{1,2}t’ | rot,root,roota,rootab |
正規表現の補助的なメタ文字
正規表現の補助的なメタ文字
基本正規表現メタ文字 | 拡張正規表現メタ文字 | 効果 |
---|---|---|
\ | \ | 直後のメタ文字を普通の文字として扱う |
\(\) | () | 指定する文字列をクループ化する |
無し | | | 複数の正規表現をORで繋げる |
実際の補助的メタ文字の使用例
基本正規表現メタ文字 | 拡張正規表現メタ文字 | 効果 |
---|---|---|
‘ro\\{2\\}t’ | ‘ro\\{2\\}t’ | ro\{2\}t,ro\{2\}ta,ro\{2\}tab, |
‘a\(bc\){2}’ | ‘a(bc){2}’ | abcbc,abcbca,abcbcac |
無し | ‘abc|123’ | 123,abc,123a,abc1 |
正規表現をシェルスクリプトで使用した詳細結果
それぞれ実際にシェルスクリプトで実行した結果については以下の記事で詳細にまとめております。
シェルスクリプトの「文字検索」で使用される「grep」コマンド結果
シェルスクリプトの「置換」で使用される「sed」コマンド実行結果