grep - 文字列検索やパターンマッチしたファイル検索をする

grepコマンドはオプションを用いることで、パターンにマッチした行数や行番号を表示することができます。
また、どのファイルがパターンにマッチしたかを表示することも可能です。

コマンド例の想定

検索するファイルの例として、以下のような「apple」、「onion」、「yuzu」の重複順列でできたテキストファイルを想定します。

itemtext.txt ▼表示

パターンにマッチした行数を数える
(-cオプション)

-cオプションでパターンにマッチした行数を数えることができます。

コマンド例

itemtext.txt ▼表示

実行結果

-vオプションを組み合わせると逆にパターンにマッチしなかった行数を数えることができます。
コマンド例

実行結果

パターンにマッチする行数を制限
(-mオプション)

-mオプションは、マッチした行数が指定した数値まで読み込むと、それ以降のそのファイルに対するパターンマッチングをストップします。

コマンド例

itemtext.txt ▼表示

実行結果

ファイルを複数選択していた場合の結果は、以下の通りになります。
ここで、itemtext2.txtはitemtext.txtのコピーになります。

コマンド例

実行結果

パターンにマッチした部分のみを抜き出す
(-oオプション)

-oオプションは、パターンにマッチした部分のみを抜き出します。出力にはマッチした部分が行に分かれて表示されます。

コマンド例

itemtext.txt ▼表示

実行結果 ▼表示

uniqコマンドと組み合わせれば、出てきたパターンの数を数え上げることができます。

コマンド例

実行結果

複数のパターンを指定している場合、uniqコマンドの前にsortコマンドを通すことで、それぞれのパターンについて、出てきた数を数え上げることができます。

コマンド例

実行結果

ファイル名を表示
(-Hオプション)

-Hオプションはパターンを検索したとき、パターンに一致した行と一緒にファイル名も一緒に表示します。
2つ以上のファイルに対して検索するとき、自動的にこのオプションはONになります。

コマンド例

itemtext.txt ▼表示

実行結果 ▼表示

ファイル名を表示しない
(-hオプション)

-hオプションはパターンに一致した行に対して、ファイル名を非表示にします。
ここでitemtext2.txtはitemtext.txtのコピーです。

通常、2つ以上のファイルに対して、grepコマンドを行うとパターンに一致した行と一緒にファイル名も表示されます。
しかし、-hオプションをつけることで、ファイル名を非表示にできます。

コマンド例

itemtext.txt ▼表示

実行結果

標準入力に渡されたものにラベルをつける
(--labelオプション)

--labelオプションは、標準入力から来た文字列に対して、ファイル名があるかのようにラベルをつけることができます。

まずは、標準入力でgrepコマンドに-Hオプションをつけて渡された時の出力を見ます。

コマンド例

itemtext.txt ▼表示

実行結果

この(standard input)に対して、別の名前を付けることができます。
それは、--labelというオプションでできます。

コマンド例

実行結果

grepで検索したパターンをファイルにどんどん追記していくときにラベルをつけておくと、どういう意図の出力された文字列かがわかるかもしれません。

パターンにマッチした部分の行番号を表示
(-nオプション)

-nオプションは、パターンに一致した部分の行番号を表示します。
コマンド例

itemtext.txt ▼表示

実行結果 ▼表示

-Hオプションと併用するとファイル名も表示することができます。
これでどのファイルのどの行がパターンに一致したかを把握することができます。

コマンド例

実行結果 ▼表示