本記事では、文字列を検索する
grepコマンドの使い方を調べたので、メモ。
grepコマンドとは

grepコマンドとは、指定した文字列を、ファイル内から検索するコマンドだ。
基本は指定した1ファイルの中から文字列を検索するといったように使用するが、ディレクトリ内の全てのファイルに対して再帰的に検索といった使い方も可能だ。
文字列を元に何か調査したい場合などによく使う。
grepの基本的な使い方
ではgrepの基本的な使い方についてメモしていく。
grepコマンドの書式
grepコマンドの書式は下記
grep [オプション] 検索文字列 検索対象
下記のような記述のファイル(grep-file0.txt)を例に、
各オプション毎の使い方を説明していく。

オプションなしの挙動を確認
まずは手始めにオプションなしのgrepコマンドの挙動を確認する。
happyという文字列を、grep-file0.txtから検索する。
grep happy grep-file0.txt
実行結果
happyという文字列を含んでいたので、
合致したhappyという文字列がコンソールに出力された。
これだけだと文字列を含んでいることはわかるが、あまり実用性がない。
そこで、オプションをつけることでより柔軟に検索を行うことができる。
オプション含めたgrepコマンドの使い方一覧
次にオプションありのgrepコマンドの使い方について説明していく。
オプションなしの時と同じファイル(grep-file0.txt)を例に説明する

-n 行数を表示する
-nオプションをつけると、文字列が見つかった行数も表示してくれる
grep -n happy grep-file0.txt
実行結果
二行目に見つかったことがわかる。
-i 大文字小文字を区別しない
-iオプションをつけると、大文字小文字の区別なく検索してくれる
grep -i happy grep-file0.txt
実行結果
大文字で始まるHappyも検索されている。
-c マッチした行数をカウントする
-cオプションをつけると、文字列にマッチした行数をカウントしてくれる
grep -c happy grep-file0.txt
実行結果
マッチしたのが一行だったことがわかる。
-v マッチしない行を表示する
-vオプションをつけると、文字列にマッチしない行を表示する
grep -v happy grep-file0.txt
実行結果
happyにマッチしなかった行が出力された。
ディレクトリを再帰的にgrepする
一つのファイルから文字列を検索するのではなく、
ディレクトリ以下を再帰的にgrepすることで、
複数のファイルに対して一気にgrepすることが可能。
調査などでは、まず文字列がどのファイルに含まれているか分からない場合が多いので、
ファイルを指定するのではなく、ディレクトリ以下を再帰的にgrepする場合が多い
以下のようなディレクトリとファイル構成を元に説明。

grep-file0.txtの記述内容
grep-file1.txtの記述内容
grep-file2.txtの記述内容
-r 再帰的に検索する
-rオプションは、ディレクトリを再帰的にgrep検索するオプションだ。
検索対象にディレクトリを指定することで、
ディレクトリ以下のファイルに対して、再帰的にgrepを実行する
grep -r happy .
実行結果
全てのファイルにはhappyという文字列が含まれているため、
再帰的にgrepした結果、全てのファイルから文字列が検索された。
ちなみに筆者は「grep -rn 検索文字列 検索パス」という使い方を好んでよく使うので、呪文のように覚えてしまっている。お勧めなのでぜひ覚えて欲しい。
その他、オプション
上記以外でも使いえそうなオプションを下記にまとめた。
-h マッチしたファイル名を表示しない
マッチしたファイル名を表示しないオプション。
-l マッチした場合ファイル名だけを表示する
マッチしたファイル名だけを表示するオプション。
-E 拡張正規表現を使用する
文字列の検索パターンに、拡張性機表現を使用する。
linuxコマンド関連記事一覧