Linux

正規表現とは?Linuxで正規表現を使ってファイル検索してみよう【分かりやすく解説】

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、正規表現について解説します。正規表現とは、特定の条件を表す文字列を抽象的に表したものです。ファイルの検索や特定の文字列を抽出するときに使います。正規表現の概要や使い方を分かりやすく解説します。今回はLinuxで正規表現を使ってファイル検索をしてみましょう。

正規表現とは?

正規表現ってなに・・・?

今回の記事では、正規表現について解説します。

正規表現(Regular Expression)とは、特定の条件を表す文字列を抽象的に表現したものです。任意の文字列パターンを表す表記方法です。

正規表現の概要や使い方を理解できるように分かりやすく解説します。

どのような時に正規表現を使うのか

正規表現は、複雑な文字列の検索や抽出するときに使います。例えば、以下のような状況です。

  • 先頭は数字で文末は英語の文章を検索
  • aではじまり2文字目が1か2の文字列

このような複雑な条件を正規表現をつかって検索することができます。ちなみに、この条件を正規表現で表すと以下のようになります。

正規表現は、複雑な文字列の検索や抽出するときに使います。例えば、以下のような状況です。

  • a[12]
  • ^[0-9].*[a-z]$

Linuxで正規表現を使ってファイル検索してみよう

次に正規表現の使い方を解説します。

Linuxのgrepコマンドを使って、ファイルの中身から正規表現を使って文字列を検索してみます。

次の内容のファイルを作成して、正規表現を使ってみましょう。Linuxで”a.txt”を作成して、以下の内容を入力してください。

abcd
efgh
1234ijkl

文字を表す正規表現

まず、文字を表す正規表現です。文字は正規表現の中でもそのまま表します。

例えば、”abcd”という文字列を検索したい場合は、”abcd”と入力します。Linuxでgrepコマンドを使って、確認してみましょう。

grep -E 'abcd' a.txt
→abcd

コマンドを入力すると、”abcd”と表示され、その他の文字列は表示されていません。

文字を表す正規表現

任意の文字列を表す正規表現

次に任意の文字列を表す正規表現です。

任意の一文字を表すには”.”ピリオドを使用します。「a..d」は「abcd」や「abbd」などを表します。コマンドは以下のようになります。

grep -E 'a..d' a.txt
→abcd

先ほど同様”abcd”と表示されます。

任意の文字を表す正規表現

文字クラスで文字の集合を表す正規表現

次に説明するのは、文字クラスです。文字クラスは「[」「]」でくくって、文字の集合を表します。

例えば、aからzのアルファベットや1から9の数字を表します。この場合、[a-z]や[1-9]のように表します。

“^”ハットを先頭に付けることで~以外の文字を表すことができます。[^abc]はaでもbでもcでもない1文字という意味になります。

先頭と文末を表す正規表現

次は先頭と文末を表す正規表現です。^aは先頭にあるaを意味します。a$は文末にあるaを意味します。^$は空白表を意味します。

先ほど説明した文字クラスの中で使われる”^”とは意味が違うので注意しましょう。

繰り返しを表す正規表現

最後に紹介するのは、繰り返しを表す正規表現です。”*”アスタリスクを使用します。アスタリスクの直前の文字列の繰り返しを表現します。

例えば、ab*dでは、「abbbd」や「abbbbbbd」などがマッチします。繰り返しが0回である、「ad」もマッチします。

また、シェルの全ての文字列という意味にする場合は、”\”バックスラッシュを使ってエスケープします。a\*のように表します。

その他の正規表現の使い方は、以下のサイトが分かりやすいです。興味のある方はご覧ください。

基本的な正規表現一覧 | murashun.jp

正規表現まとめ

今回の記事では、正規表現について解説しました。正規表現は文字を検索するときによく使うので覚えておきましょう。

正規表現はLinuxだけでなくプログラムのコーディングでもよく使います。ITエンジニアには、必須の知識になります。

このようなITに関連する内容を当ブログでは、発信しているので興味のある方は、是非ご覧ください。

さらにlinuxについて勉強したい方はこちらの参考書がオススメです。

About me
大手メーカのIT部門→上場ベンチャーでインフラエンジニアやってます。エンジニア歴は8年目。 サーバ、ネットワーク、セキュリティ、クラウドについて投稿します。 AI、ARも勉強中です! youtubeでも技術ネタを発信していきます。↓のアイコンよりご覧ください!