grep コマンドを使用して正規表現を照合する
ここまで、基本的なファイル検査と正規表現について説明してきました。 このユニットでは、特定のファイルや grep
で正規表現に一致するパターンを検索する stdin
コマンドについて説明します。 これまでに確認した他のコマンドと同様に、grep
コマンドにも、出力とその動作を制御するためのフラグが数多くあります。
基本的な使用方法
コマンドの基本的な使用方法について説明しましょう。
grep
の一般的な構文は grep 'pattern' [file_to_search]
で、パターン値はアポストロフィ ('
) 文字で囲みます。
ファイル内でパターン *.novo.dk
を含むすべての行を検索するには、次のように正規表現を指定します。
- アスタリスク (
*
) で始めて、任意の文字に 0 回以上一致する行を探します。 - アスタリスクの後に文字列
.novo.dk
を続けます。 この例では、ピリオド (.
) はリテラルであり、ワイルドカードとしては使われません。 - パターン内の特殊記号であるアスタリスクとピリオドには、バックスラッシュ (
\
) エスケープ文字を使います。
ファイルに grep を使う
grep
パターンの'*.novo.dk'
を含む NASA-logs-1995.txt ファイル内のすべての行を検索します。
最初に、Cloud Shell エディターを閉じ、ターミナルに十分な領域が表示されるようにして、コマンド出力を確認します。
エディターを閉じるには、次の 2 つの方法があります。
- Ctrl + Q キーを押します。
- 省略記号 (...) を選択し、[エディターを 閉じる] を選択します。
ファイル内の
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 を使います。 |