grep -cオプションの使い方を完全ガイド!Linuxで一致した行数をカウントする方法
生徒
「先生、grepコマンドで特定の文字列を検索できるのは分かりました。でも、見つかった行が何行あるか数えるにはどうしたらいいんですか?」
先生
「それなら-cオプションを使うといいよ。指定したキーワードに一致した行数を数えてくれる便利な機能なんだ。」
生徒
「なるほど!grepって検索だけじゃなくて、カウントもできるんですね!」
先生
「そうなんだよ。ログファイルの分析や、どのくらいエラーが発生してるか調べたいときに便利なんだ。使い方を詳しく見ていこうか。」
1. grep -cオプションとは?
grep -cは、Linuxのターミナルでファイルの中から特定のキーワードが含まれている行が全部で何行あるかを素早くカウントするための便利なオプションです。末尾の「c」は「count(カウント)」の頭文字だと覚えると分かりやすいでしょう。
ここで初心者が間違えやすい重要なポイントが1つあります。それは、このコマンドが数えるのは「単語の数」ではなく、あくまで「行の数」であるという点です。
初心者向け:行数カウントのイメージ
たとえば、1行の中に「エラー」という言葉が3回書いてあっても、grep -cでカウントすると「1行」として計算されます。文章全体の中に、そのキーワードが出現する行がいくつ存在するかを特定したい時に役立ちます。
実際に、簡単なテキストファイル(sample.txt)を例に、どのような動作になるか見てみましょう。
cat sample.txt
りんご
みかん、りんご
バナナ
grep -c りんご sample.txt
2
上記の例では、1行目と2行目に「りんご」という言葉が含まれているため、実行結果として「2」が表示されます。プログラミングやサーバーの運用経験がない方でも、膨大なデータの中から特定のデータが「何件(何行)あるか」を瞬時に把握できるため、日常的なログ確認作業などで非常に重宝される機能です。
2. grep -cの基本的な使い方
たとえば、「log.txt」ファイルの中から「エラー」という文字列が含まれる行数を知りたい場合、次のように入力します。
grep -c エラー log.txt
5
この出力結果「5」は、「エラー」という言葉を含む行が5行あったことを意味します。
3. grep -cと通常のgrepの違い
通常のgrepでは、一致した行そのものが表示されます。
grep エラー log.txt
2025-09-14 エラー発生
2025-09-15 エラーコード: 500
2025-09-16 エラー処理開始
しかし-cを付ければ、出力は数字だけ。どのような内容の行かではなく、「行数だけ知りたい」ときに便利です。
4. grep -cの実用例
- ログファイルでエラー発生回数を数える
- 設定ファイルで特定の項目が何回使われているか確認する
- メール本文の中にあるキーワードの出現行数をチェックする
たとえば、Webサーバーのログに含まれる「404 Not Found」の発生行数を調べたい場合は以下のようにします。
grep -c "404 Not Found" access.log
12
5. 複数ファイルに対してgrep -cを使う
grep -cは、複数のファイルにまたがって使うこともできます。
grep -c エラー log1.txt log2.txt
log1.txt:3
log2.txt:7
このように、各ファイルごとの一致行数が表示されて非常に分かりやすくなります。
6. grep -ciで大文字小文字を無視してカウント
「Error」「ERROR」「error」などのように、大文字と小文字が混在している場合は、-iオプションを併用します。
grep -ci error log.txt
10
これにより、「Error」や「ERROR」などもすべてカウント対象になります。
7. grep -cvで除外した行数をカウント
逆に、あるキーワードを含まない行の数を知りたいときは、-v(除外)と一緒に使います。
grep -cv エラー log.txt
95
この場合、「エラー」が含まれていない行が95行あることがわかります。
8. wc -lとの違い
似たようなことをするコマンドにwc -lがあります。これは行数をカウントするコマンドです。
しかし、grep -cは条件に一致した行だけを数えるので、目的に応じて使い分けましょう。
grep エラー log.txt | wc -l
5
これはgrep -c エラー log.txtと同じ結果になります。
9. grep -cの注意点
- キーワードが1行に複数回登場しても「1行」としてカウントされる
- あくまで行単位で数える点を理解しておく
- 複雑なパターンを使いたいときは、正規表現を活用するとより柔軟に対応できる
例えば、1行に「エラー」という単語が2回出ていても、grep -cはその行を「1行」としてカウントします。