grepコマンドで覚えておきたい使い方14個(+3個)
Pocket

LinuxやUnixを使っていく上で、どんなに経験が浅くても一度は利用するgrepコマンド。
今回は、このgrepコマンドで覚えておきたい使い方について紹介する。

なお、ここで扱うgrepコマンドはLinuxのものをベースに記述している。商用UNIXやBSD等の場合、オプションなどが異なる事があるので注意。

1.基本の使い方

まずは基本的な使い方から。
テキストファイルから特定の文字列を含む行のみ出力する。

# grep 検索したい文字列 検索したいテキストファイル

20141224_000001

ワイルドカードを用いる事で、複数のファイルを指定してgrepを行う事も出来る。

20141224_000002

 

コマンドの出力結果から検索する場合は、「|(パイプ)」を利用する。

# コマンド | grep 検索したい文字列

20141225_000001

2.複数の条件でor検索する

複数の条件で検索を行う場合、eオプションを付与する。

# grep -e 検索したい文字列1 -e 検索したい文字列2 検索したいテキストファイル

20141225_000000

3.大文字・小文字を区別しないで出力させる

通常、grepはアルファベットの大文字、小文字を区別して検索している。
これを区別させないようにするには、iオプションを付与する。

# grep -i 検索したい文字列 検索したいテキストファイル

20141226_000000

4.特定の文字列を持つ行を除外して出力する

特定の文字列を持つ行を除外するには、vオプションを用いる。

# grep -v 除外したい文字列 検索したいテキストファイル

20141226_000001

5.検索にヒットする前後の行を出力させる

Linuxで利用出来るgrepでは、検索でヒットした行の前後の行を出力させることも出来る。
前の行を出力する場合はBオプションを、後の行を出力させる場合にはAオプションを付与する。

●検索にヒットした前の行を出力する場合

# grep 検索したい文字列 -B 出力したい行数 検索したいテキストファイル

●検索にヒットした後の行を出力する場合

# grep 検索したい文字列 -A 出力したい行数 検索したいテキストファイル

20141227_000000

前後の行を同時に出力したい場合は、Cオプションを付与する。

# grep 検索したい文字列 -C 出力したい行数 検索したいテキストファイル

20141227_000001

6.検索にヒットする行数を取得する

検索にヒットする行数を取得するには、cオプションを付与する。

# grep -c 検索したい文字列 検索したいテキストファイル

20141227_000003

 

Sponsored Links

7.ファイルの行番号を出力する

ファイルの行番号を追加して出力するには、nオプションを付与する。

# grep -n 検索したい文字列 検索したいテキストファイル

20141227_000002

8.フォルダ内のファイルを再帰的に指定する

フォルダ内にあるファイルを、サブディレクトリも含めて再帰的に指定、検索する場合は、rオプションを用いる。

# grep -r 検索したい文字列 検索したいファイルのあるディレクトリ

20141227_000004

9.独立した文字列をもつ行のみを出力させる

grepでは、例えばadで検索するとaddressやmadといった、別の意味を持つ単語も引っかかってしまう。
これらを排除するには、wオプションを付与する。

# grep -w 検索したい文字列 検索したいファイル

20141227_000005

10.圧縮ファイルを検索する

圧縮ファイルの中を検索し、キーワードに該当するかを確認するには、zgrepコマンドという、圧縮ファイルに対応したコマンドを用いる。

# zgrep 検索したい文字列 検索したいファイル

詳細については、こちらを参照してもらいたい。

20141228_000000

11.複数のキーワードをパターン化したファイルを読込み、合致した行を出力する

grepでは、複数の検索キーワードをパターンとしてまとめたファイルを作成しておき、そのファイルに記述されているキーワードに合致した内容を出力させる事が出来る。
それには、fオプションを用いる。

# grep -f 検索パターンを記述したファイル 検索したいファイル

20141228_000003

12.検索キーワードを持つファイルのリストを取得する

検索キーワードを持つファイルのリストを取得するには、lオプションを用いる。

# grep -l 検索パターンを記述したファイル 検索したいフォルダ/*

20141228_000004

13.正規表現で検索を行う

grepでは、正規表現を利用することが出来る。
利用出来る正規表現については、こちらを参照すると良いだろう。

14.psコマンドにgrepした時に、grepのプロセスを表示させないようにする

psコマンドの出力結果に対しgrepを行う場合、そのgrepのプロセスも表示されてしまう。
これを出力させないようにするには、以下のようにする。

# ps -ef | grep [検索ワードの一文字目]二文字目以降

20141228_000005

 

2016/05/02 追記

15.エラー出力をさせない

「-s」オプションを付与することで、grepコマンドでファイルが無いといった際、エラーになってもエラー出力をさせないようにできる。

[root@test-node tmp]# ls -al /tmp/sample.txt1
ls: /tmp/sample.txt1 にアクセスできません: そのようなファイルやディレクトリはありません
[root@test-node tmp]# grep aaa /tmp/sample.txt1
grep: /tmp/sample.txt1: そのようなファイルやディレクトリはありません
[root@test-node tmp]# grep -s aaa /tmp/sample.txt1
[root@test-node tmp]#

16.正規表現の展開をさせない

ファイル内の正規表現を検索する際、grepで正規表現を展開されると困る場合は「-F」オプションを用いる事で、grep実行時に正規表現を展開せずにそのまま検索させることができる。

[root@test-node tmp]# cat /tmp/test.txt
111.111.111.111
111.*.*.0

[root@test-node tmp]# grep 111.* /tmp/test.txt
111.111.111.111
111.*.*.0
[root@test-node tmp]# grep -F 111.* /tmp/test.txt
111.*.*.0

17.grepでキーワードの色付けをする

grepでは、「–color」でキーワードの色付けを管理することができる。
最近のLinuxディストリではエイリアスで「–color=auto」が指定されている。

以下、「–color」で指定出来る値。

  • never … 色付けをしない
  • auto … 色付けをする
  • always … パイプでつなげた後の出力でも色をつける

 

grepで指定できる色は環境変数「GREP_COLOR」で指定できる。
これを利用することで、特定のキーワードのみ色付けしてファイルを読むこともできる。

20160502_000000

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

This article has 3 comments

  1. Pingback: 【コンピューター】 そこそこセキュアなlinuxサーバーを作る – Qiita 2014年12月30日 深夜便 | aquadrops * news

  2. Pingback: 【コンピューター】 2014年の「はてなブックマーク 年間ランキング」100位まで – はてなニュース 2014年12月30日 朝刊 | aquadrops * news

  3. Pingback: [linux]忘れ易いコマンド | 文章のないところに現象はない

Leave a Comment

メールアドレスが公開されることはありません。