正規表現 (Regular Expressions)
100%

高度なテキスト操作 · レッスン 1

正規表現 (Regular Expressions)

アンカー、文字集合、繰り返し、正規表現の種類が、テキストのパターンマッチングをどのように制御するかを学びます。

regex と略される正規表現は、テキストのパターンを記述します。grepsedawk などのツールで正規表現を使えますが、対応する構文は異なる場合があるため、必ずツールと正規表現の種類を確認してください。

GNU grep は、既定で基本正規表現(BRE)を使い、-E を指定すると拡張正規表現(ERE)を使います。このレッスンでは、まず両方に共通する構文を紹介し、その後で一般的な ERE の追加機能を説明します。

例では次の入力を使います。

sally sells seashells
by the seashore

リテラルテキストに一致させる

通常の文字の多くは、その文字自体に一致します。パターン seashells は、その正確な並びをどこかに含む行を選びます。

$ grep 'seashells' sample.txt
sally sells seashells

マッチングツールが受け取る前にシェルが展開または分割しないよう、正規表現のパターンは引用符で囲んでください。正規表現はシェルのパス名展開とも異なります。正規表現の * は直前の要素を繰り返しますが、シェルの glob における * は、それ自体がパス名の文字列に一致するワイルドカードです。

ab* のような正規表現で、* は何をしますか?

一致位置を固定する

ブラケット式の外で、パターン先頭の ^ は、一致位置を行頭に固定します。

^by

$ アンカーは行末に一致します。

seashore$

行全体をパターンに一致させる場合は、両方のアンカーを組み合わせます。

^by the seashore$

行全体が by the seashore である場合だけ一致するパターンはどれですか?

1 文字に一致させる

通常の行単位の正規表現モードでは、ドットが任意の 1 文字に一致します。

b.

これは by に一致しますが、bab7 にも一致します。b の後に 1 文字必要なので、b だけには一致しません。リテラルのピリオドには \. とエスケープするか、適切なブラケット式に入れてください。

行全体を対象とするパターン ^b.$ に一致しない文字列はどれですか?

ブラケット式を使う

ブラケット式は、指定した集合から 1 文字に一致します。

s[ae]lls

これは、その位置に a または e がある salls または sells に一致します。

^[ の直後の最初の文字なら、集合を否定します。

s[^e]lls

最初の s の次の文字が e 以外でなければならないため、salls には一致しますが sells には一致しません。

[^e] は何に一致しますか?

範囲を使うと、両端の間にある文字を表せます。

d[a-c]g

これは dagdbgdcg に一致します。範囲の動作はロケールの照合順序に依存することがあります。[[:lower:]][[:upper:]][[:digit:]] などの文字クラスの方が、意図を明確に表せることがよくあります。

パターンを繰り返して組み合わせる

BRE と ERE のどちらでも、* は直前の要素を 0 回以上繰り返すことを意味します。

seashells*

これは seashell の後に s が 0 個以上続く文字列に一致します。grep -E の ERE モードで使える一般的な演算子には次のものがあります。

  • +:1 回以上の繰り返し
  • ?:0 回または 1 回の繰り返し
  • |:左側または右側の式
  • (...):式のグループ化

たとえば、次のように使います。

$ grep -E '^(cat|dog)s?$' animals.txt

これは、行全体が catcatsdogdogs のいずれかである行を選びます。BRE モードではこれらの演算子のエスケープ規則が異なるため、種類を確認せずにパターンをコピーしてはいけません。

パターン ^(cat|dog)s?$ で拡張正規表現の構文を有効にするコマンドはどれですか?

Linux のテキストツールによる正規表現の選択を練習するには、次のハンズオンラボを利用してください。

  1. **Linux で grep を使用してテキストを検索する**:grep でファイル内のテキストを検索し、基本検索、行番号表示、^$ による位置指定、基本および拡張正規表現を使った複雑なパターンマッチングを練習します。
  2. **テキスト処理と正規表現**:強力なテキスト処理ツール grep、sed、awk と、効率的なテキスト操作やパターンマッチングのための正規表現を学びます。
  3. **メールアドレスと数字の抽出**:grep と正規表現を使ってファイルからメールアドレスと数字を抽出し、Linux の重要なテキスト処理スキルを練習します。

レッスン完了

正規表現 (Regular Expressions) を完了しました

これで、行単位の基本的な正規表現を読み、作成できるようになりました。

  • 正規表現演算子とシェルのパス名ワイルドカードを区別する。

  • 一致位置を行頭または行末に固定する。

  • ドットまたはブラケット式で 1 文字に一致させる。

  • 集合を否定し、ロケールを考慮した文字クラスを使う。

  • BRE または ERE の構文を意図的に選ぶ。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
次のレッスン
高度なテキスト操作 に戻る