ホーム > テキスト処理・検索 > grep

grep: 一致する行数を数える

grepコマンドは、テキストファイルや標準入力から特定のパターンを検索するための強力なユーティリティです。特に`-c`(または`--count`)オプションを使用すると、パターンに一致する行の総数を効率的に数えることができます。これは、ログ分析、コードレビュー、データフィルタリングなど、さまざまな状況で役立ちます。

概要

grepはGlobal Regular Expression Printの略で、正規表現を使用してテキストを検索し、一致する行を出力します。`-c`オプションは、一致する行自体を出力する代わりに、一致する行の数のみを数値で返します。

主な特徴

  • 特定のパターンに一致する行の数のみを出力
  • 正規表現をサポートし、柔軟なパターン検索が可能
  • 大文字・小文字の区別、逆マッチなど、さまざまな検索条件と組み合わせ可能
  • 複数のファイルまたはディレクトリ内のファイルを検索可能

主なオプション

grep -cと組み合わせてよく使用される、またはカウント結果に影響を与える主なオプションです。

カウント/検索制御

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`grep` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

grep -cコマンドを活用したさまざまな使用例です。

特定のファイルでパターン一致行数を数える

grep -c "error" sample.log

sample.logファイルで'error'文字列が含まれる行の数を数えます。

大文字・小文字を区別せずにパターン一致行数を数える

grep -ci "warning" sample.log

sample.logファイルで'warning'または'Warning'など、大文字・小文字を区別せずに一致する行の数を数えます。

複数のファイルでパターン一致行数を数える

grep -c "keyword" *.txt

現在のディレクトリのすべての.txtファイルで'keyword'が含まれる行の数を、各ファイルごとに数えます。

再帰的にディレクトリ内のファイルでパターン一致行数を数える

grep -rc "function" .

現在のディレクトリとすべてのサブディレクトリ内のファイルで'function'文字列が含まれる行の数を数えます。

パターンと一致しない行の数を数える

grep -cv "success" sample.log

sample.logファイルで'success'文字列が含まれていない行の数を数えます。

パイプで入力を受け取り行数を数える

ls -l | grep -c "root"

ls -lコマンドの出力で'root'が含まれる行の数を数えます。

ヒントと注意点

grep -cコマンドをより効果的に使用するためのヒントと注意点です。

grep -cとwc -lの違い

grep -cはパターンに一致する行のみを数えるのに対し、`grep "pattern" file | wc -l`は`grep`の出力(一致するすべての行)を`wc -l`が受け取って行数を数えます。ほとんどの場合、`grep -c`の方が効率的です。しかし、`grep`でフィルタリングされた行に対して追加の処理が必要な場合は、後者の方法が役立つことがあります。

  • grep -c: パターン一致行のみカウント。より高速で直接的。
  • grep ... | wc -l: grepが出力したすべての行をカウント。追加のパイプライン処理に便利。

正規表現の活用

grepは強力な正規表現をサポートしています。特定の単語だけでなく、行の先頭(`^`)、末尾(`$`)、特定の文字セット(`[abc]`)、繰り返し(`*`, `+`)などを活用して複雑なパターンを検索し、カウントできます。拡張正規表現を使用するには`-E`オプションを追加してください。

ファイル名の出力制御

複数のファイルを検索する際、`-c`オプションはデフォルトで各ファイル名と共にカウント結果を出力します。もしファイル名を省略して合計値のみを取得したい場合は、`grep -c "pattern" file1 file2 | awk '{s+=$1} END {print s}'`のように`awk`を組み合わせるか、`find . -name "*.log" -exec grep -c "pattern" {} + | awk '{s+=$1} END {print s}'`のように使用できます。


同じカテゴリのコマンド