grep コマンドを使用して正規表現を照合する

完了

ここまで、基本的なファイル検査と正規表現について説明してきました。 このユニットでは、特定のファイルや grep で正規表現に一致するパターンを検索する stdin コマンドについて説明します。 これまでに確認した他のコマンドと同様に、grep コマンドにも、出力とその動作を制御するためのフラグが数多くあります。

基本的な使用方法

コマンドの基本的な使用方法について説明しましょう。 grep の一般的な構文は grep 'pattern' [file_to_search] で、パターン値はアポストロフィ (') 文字で囲みます。

ファイル内でパターン *.novo.dk を含むすべての行を検索するには、次のように正規表現を指定します。

  • アスタリスク (*) で始めて、任意の文字に 0 回以上一致する行を探します。
  • アスタリスクの後に文字列 .novo.dk を続けます。 この例では、ピリオド (.) はリテラルであり、ワイルドカードとしては使われません。
  • パターン内の特殊記号であるアスタリスクとピリオドには、バックスラッシュ (\) エスケープ文字を使います。

ファイルに grep を使う

grep パターンの'*.novo.dk'を含む NASA-logs-1995.txt ファイル内のすべての行を検索します。

  1. 最初に、Cloud Shell エディターを閉じ、ターミナルに十分な領域が表示されるようにして、コマンド出力を確認します。

    エディターを閉じるには、次の 2 つの方法があります。

    • Ctrl + Q キーを押します。
    • 省略記号 (...) を選択し、[エディターを 閉じる] を選択します。

    省略記号コンテキスト メニューの [エディターを閉じる] オプションを示すスクリーンショット。

  2. ファイル内の grep 正規表現と一致する \*\.novo\.dk コマンドを実行します。

    grep '\*\.novo\.dk' NASA-logs-1995.txt
    

    出力の最後の数行を次に示します。

    ...
    ***.novo.dk 807951981 GET /shuttle/countdown/video/livevideo2.gif 200 69067
    ***.novo.dk 807952044 GET /htbin/cdt_clock.pl 200 543
    ***.novo.dk 807952060 GET /shuttle/countdown/lps/fr.html 200 1879
    ***.novo.dk 807952078 GET /shuttle/countdown/lps/fr.gif 200 30232
    ***.novo.dk 807952102 GET /shuttle/countdown/lps/back.gif 200 1289
    

複数のファイルに grep を使う

また、複数のファイルを grep コマンドに渡すこともできます。

両方の NASA データセット ファイルにある "NASA" という単語の出現箇所をすべて探してみましょう。 今回ははるかに多くの結果が予想されるので、すべての結果を見るのではなく、パターンに一致した行数を報告するようにコマンドに指示します。 このカウントと報告を行うには、-c フラグを grep コマンドに渡します。

  • 2 つのデータセット ファイルに対して、次の grep コマンドを実行します。

    grep -c 'NASA' NASA-logs-1995.txt NASA-software-API.txt
    

    次のように出力されます。

    NASA-logs-1995.txt:17277
    NASA-software-API.txt:26
    

    ログ データセットには "NASA" のインスタンスが 17,277 個、API データセットには 26 個存在します。

Grep のフラグ

grep コマンドは強力です。 複雑な正規表現を照合し、必要に応じて出力を調整するのに使用できます。 次に、覚えておくと便利なフラグをいくつか示します。

フラグ 定義
grep -c パターンに一致する行数をカウントします (grep 'pattern' file | wc -l と同じ)。
grep -n 行番号付きで、一致したパターンを示します。
grep -i 大文字と小文字を区別しない一致を許可します。
grep -w 単語全体に一致します。
grep -H ファイル名を含めます。これは、複数のファイルを渡しているときに便利です。
grep -m <max number lines> 一致の表示数を制限します。 最初の 4 つの一致のみに表示を制限するには、-m4 を使います。