grep とのパイプ
CoddyのTerminalジャーニー「基礎」セクションの一部 — レッスン 46/82。
grep コマンドは、パイプと組み合わせることで特に強力になります。ファイル内で検索する代わりに、任意のコマンドの出力から必要なものをフィルタリングして見つけられます。
ディレクトリ一覧から特定のファイルを見つけたい場合を想像してください:
ls -l | grep "report"これにより、すべてのファイルを詳細にリストし、「report」を含む行のみを表示するようにフィルタリングします。すべてを手動でスキャンせずに、対象の結果が得られます。
grepへのパイプは、テキスト出力を生成する任意のコマンドで動作します。特定のプログラムに関連する実行中のプロセスを見つけるには:
ps aux | grep "python"また、grep をこれまでに学んだ他のコマンドとチェインすることもできます。特定の単語を含む行の数を数えるには:
cat logfile.txt | grep "error" | wc -lこれはファイルを読んで、「error」を含む行をフィルタリングし、それらをカウントします。以前学んだgrepのフラグは、パイプ内でも同じように動作します — 大文字小文字を区別しないマッチングには-iを使用するか、マッチを除外するには-vを使用します。
チャレンジ
簡単ファイル access.log にはウェブサーバーのアクセス記録が含まれています。パイプを使用して 500 エラー ステータス コードとなったリクエストの数をフィルタリングしてカウントしてください。
以下のことを行う 1 つのコマンドを実行してください:
catを使用してaccess.logを読み込みますgrepにパイプして500を含む行をフィルタリングしますwc -lにパイプして一致する行をカウントします
ヒント: 3 つのコマンドを
|記号を使用して連結します。grep コマンドが出力をフィルタリングし、wc -lが残った行をカウントします。
チートシート
grep コマンドは、パイプ (|) を使用して他のコマンドの出力をフィルタリングできます。
ディレクトリ一覧をフィルタリング:
ls -l | grep "report"実行中のプロセスをフィルタリング:
ps aux | grep "python"フィルタリングとカウントのために複数のコマンドを連結:
cat logfile.txt | grep "error" | wc -lgrep のすべてのフラグはパイプで動作します。例えば、大文字小文字を区別しないマッチングのための -i や、マッチを除外するための -v などです。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。