grepは、指定した範囲内のファイルに対してキーワード検索し、検索文字列にヒットするファイルを探しだすときに使用するコマンドです。
このコマンドも、ラズベリーパイでプログラミングを勉強するときに、使用する機会が多いコマンドの1つです。
grepの基本的な使い方
grepも、基本的に2つの引数をとります。
- 検索したい文字列(正規表現使用可能)
- 検索対象のファイル名(ワイルドカード可)
例えば、カレントディレクトリ内にあるaaa.log, bbb.log, ccc.logという3つのファイルの中から、”xyz”というキーワードが書かれている行を探す、という場合には、以下のコマンドを実行します。
1 | $ grep xyz *.log |
正規表現も使用できます。
foo.logというファイルの中で、行の先頭がabcで始まる行を検索する場合は、
スポンサーリンク1 | $ grep ^abc foo.log |
などと指定します。
同じく正規表現の例で、foo.log中で、アルファベットの(大文字を含めて)a〜zまでを含んでいる行をすべて表示するには、
1 | $ grep [A-Za-z] foo.log |
というコマンドになります。
grepのオプション
grepのオプションはたくさんありますが、その一部をあげます。
-e : 検索文字列の指定
検索文字列を指定します。
検索文字列が1つのときは省略することが多いですが、複数指定する時にはこのオプションを使います。
例えば、
1 | $ grep -e ^abc -e xyz$ foo.log |
は、「行の先頭がabcで始まるか、または行の末尾がxyzで終わる行」を検索します。
-r : 再帰的に検索
通常の検索では、指定したファイルの中を検索しますが、-rオプションを指定して、さらに検索対象のファイル名のところをディレクトリ名で指定すると、そのディレクトリ内のすべてのファイルを検索してくれます。
指定ディレクトリの中に、さらにディレクトリがある場合は、その下もすべて検索します。
-i : 大文字と小文字とを区別しない
-iオプションを指定すると、大文字と小文字を区別せずに検索します。
-v : 検索文字列を含まない行を表示
-iオプションを指定すると、検索文字列を含まない行をすべて表示します。
すべての行に、ある特定の文字列が入っているべきファイルがあるときに、それをチェックすることができそうですね。
また、何かの実行ログを見るときに、必要のない文字列を含む行を表示しないようにスクリーニングするといった使い方もできます。
-A n : 検索文字列を含む行のn行後まで一緒に表示
-Aオプションに続いて数字nを入力すると、検索でヒットした行のn行後まで一を緒に表示します。
-B n : 検索文字列を含む行のn行前までを一緒に表示
-Bオプションに続いて数字nを入力すると、検索でヒットした行のn行前までを一緒に表示します。
-C n : 検索文字列を含む行の前後n行までを一緒に表示
これは、-Aオプションと-Bオプションとを足したようなオプションです。検索でヒットした行の前後n行を合わせて表示します。
-n : 行番号を表示
-nオプションをつけると、ヒットした行について、行番号も合わせて表示します。
1 | $ grep -n abc foo.log |
-l : 検索文字列を含むファイル名を表示
-lオプションをつけると、検索文字列を含むファイルのファイル名のみを表示します。
1 | $ grep -l abc *.log |
のように、ワイルドカードで複数のファイルを検索したり、
1 | $ grep -rl abc ./src |
-rオプションで、./srcというディレクトリ下のすべてのファイルを検索するというように、複数のファイルを検索して検索にヒットするファイル名だけを得たいときに使用します。