練習問題:検索・抽出(grep編)基礎10問

短時間で「見つける・数える・切り分ける」を鍛える10問です。
答えは クリックで展開 できます。

  • 想定レベル:Lv2〜3
  • 目安時間:各3〜6分
  • 主に使うコマンド:grep-n, -i, -v, -C, -R, -E, -o)、headwcsortuniq、必要に応じてawk

1) access.log から 404 を抽出し、先頭10行を確認する

問題access.log から 404エラーの行だけ を抽出し、先頭10行 を表示してください。
ヒント:ステータスコードの前後スペースを意識(例:" 404 ")。

解答例
grep " 404 " access.log | head -n 10

2) 5xx(サーバーエラー)の発生件数を数える

問題access.log に含まれる HTTP 5xx の行数(=発生件数)を数えて表示してください。
ヒント:拡張正規表現で 5[0-9]{2}

解答例
grep -E " 5[0-9]{2} " access.log | wc -l

3) 404 を出しているクライアントIPの上位10件を出す

問題access.log から 404 の行だけ を対象に、先頭フィールド(IP)を集計し、上位10件 を表示してください。
ヒント:抽出→フィールド抽出→集計の順。

解答例
grep " 404 " access.log | awk "{print $1}" | sort | uniq -c | sort -nr | head -n 10

4) README.md から「error」を大文字小文字を無視して行番号付きで検索する

問題README.md 内の「error」を 大小区別なく 検索し、行番号付きで表示してください。
ヒント-i-n

解答例
grep -in "error" README.md

5) access.log から bot を含む行を除外 して表示する

問題:ボットアクセスを除外して内容を確認したい。access.log から “bot” を含む行を 除外 して表示してください。
ヒント-v は否定(反転)マッチ。

解答例
grep -v "bot" access.log

6) app.log で「ERROR」の前後3行の文脈ごと表示する

問題app.log から “ERROR” にマッチする行の 前後3行 を併せて表示してください(行番号付きだと便利)。
ヒント-C 3-n

解答例
grep -nC 3 "ERROR" app.log

7) ディレクトリ src/ を再帰的に検索し、TODO を含む場所を行番号つきで探す

問題src/ 以下を 再帰検索 し、TODO を含む行を ファイル名+行番号 付きで表示してください。
ヒント-R(再帰)、-n(行番号)。

解答例
grep -RIn "TODO" src/

8) テキスト中から IPv4 アドレスだけ を抽出(重複は1回)

問題text.txt から IPv4 形式 の文字列だけを抽出し、重複を除いて 一覧表示してください。
ヒント-Eo(パターンのみ出力)。

解答例
grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" text.txt | sort -u

9) カレント以下で password= を含むファイル名のみ列挙(例外ファイルは除外)

問題:カレントディレクトリ以下で password= を含む ファイル名だけ を列挙してください。/.env.example は除外して構いません。
ヒント-l はファイル名のみ表示、--exclude で除外。

解答例
grep -RIl "password=" --exclude=.env.example .

10) syslog で単語としての「fail」出現回数を数える

問題/var/log/syslog における 単語としての “fail”出現回数 を数えてください(大文字小文字は無視)。
ヒント-w(単語境界)、-o(マッチ部のみ)、-i(大小無視)。

解答例
grep -iwo "fail" /var/log/syslog | wc -l

次の一歩

  • うまくいかなかった問題は、パターンの前後(空白・区切り)や オプションの意味 を確認しましょう。
  • 派生練習:同じ課題を 別のアプローチ(例:awk を使う、正規表現を厳密化する)で再挑戦すると理解が深まります。
  • 関連:コマンド索引(grep, awk, sort, uniq)/実務レシピ「エラーメッセージを素早く探す方法

学びを“実務”へつなぐ最短ルート

独学で積み上げた「わかった」を、仕事で使える「できる」へ。
学習ハブの内容を踏まえて、実務に直結する学習設計・添削・質問環境を整えたい人は、下記のページで具体的な進め方を確認してください。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする