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

grepコマンドは再帰的にディレクトリ内のファイルの中にあるパターンにマッチした行を検索することができます。
また、パターンにマッチした行がファイルに含まれているかのファイル検索を行うこともできます。
さらにオプションをつけることで、特定のディレクトリやファイルを検索から除外することもできます。

コマンド例の想定

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

itemtext.txt ▼表示

また、ディレクトリ構造を以下のように想定します。
.(ドット)はカレントディレクトリです。
itemtext2.txtとitemtext-dir1.txtは、itemtext.txtのコピーになります。
また、empty.txtとempty-dir1.txtは何も書かれていないファイルとなります。

パターンにマッチしているファイルを検索
(-lオプション)

lオプションは、パターンの後にファイル名を指定することでパターンにマッチした行ではなく、ファイルの名前を表示してくれます。

コマンド例

または

実行結果

ディレクトリを指定した場合に違うメッセージを出しますが、-sオプションを用いることでこのようなメッセージやエラーメッセージを表示させないようにすることができます。
コマンド例

または

実行結果

再帰的にパターンにマッチしているファイルを検索
(-rオプションと-lオプション)

-rオプションは、ファイルの代わりにディレクトリを指定して、再帰的にそれぞれのファイルに対して検索を行っていくオプションです。

コマンド例

または

実行結果

ディレクトリを指定しなければ、現在のディレクトリから再帰的に検索していきます。

コマンド例

実行結果

再帰的にファイルに対してパターンにマッチした行を検索
(-rオプション)

-rオプションは、ファイルの代わりにディレクトリを指定して、再帰的にそれぞれのファイルに対して検索を行っていくオプションです。
ディレクトリを指定しなければ、現在のディレクトリから再帰的に検索していきます。

コマンド例

itemtext.txtとitemtext2.txtとitemtext-dir1.txt ▼表示

実行結果 ▼表示

ディレクトリを複数指定した場合は、入力した順番のディレクトリでファイルを再帰的に実行していきます。

コマンド例

実行結果 ▼表示

この例ではdir1を繰り返して、検索していますが実際に利用する際はこのような指定はしないと思います。

再帰的な検索から検索項目を除外
(--excludeオプション)
(--exclude-fromオプション)
(--exclude-dirオプション)

--excludeオプション

--excludeオプションは、検索から除外するファイルを指定します。指定するファイルについてはワイルドカードを使用できます。*.txtですべてのテキストファイルを検索から除外します。今回の例では出力は表示されません。

コマンド例

実行結果 なし

もし、itemtext.txtのコピーであるitemtext.datがあるならば、このコマンド例は以下のような実行結果になります。

実行結果 ▼表示


'{}'で複数のリストを指定することもできます。

この指定方法は

と等価なコマンドになります。
これはすべてのテキストファイルとすべてのデータファイルを除外することができます。

--exclude-fromオプション

--excludeオプションで除外するファイルは別のファイルにすることができます。
--exclude-fromオプションは、--excludeオプションで除外するファイルを別のファイルに書き込んで置き、そのファイルを読み込んで検索から除外することができます。

コマンド例

exclude-file.txt

実行結果 なし

--exclude-dirオプション

--exclude-dirオプションは検索から除外できるディレクトリを指定することができます。
ワイルドカードを用いた指定もできます。

コマンド例

実行結果 ▼表示

指定のファイルのみを検索
(--includeオプション)

--includeオプションは指定したファイルだけを検索します。
*.txtですべてのテキストファイルだけを検索します。
--excludeオプションと同じようにワイルドカードを用いて指定することができます。

コマンド例

実行結果 ▼表示

シンボリックリンクのディレクトリも再帰検索
(-Rオプション)

-Rオプションはシンボリックリンクの先のディレクトリやファイルも再帰検索するオプションです。通常の-rオプションではシンボリックリンクの先までは再帰検索を行いません。

-Rオプションで検索の除外をする際、-rオプションと扱いは同じになり、シンボリックリンクの先がディレクトリの場合は--exclude-dirオプションで、シンボリックリンクの先がファイルの場合は--excludeで除外することができます。

コマンド例

実行結果 ▼表示

この例ではあらかじめシンボリックリンクを準備しています。
dir1のシンボリックリンクのディレクトリはdir1_symです。
itemtext.txtのシンボリックリンクのファイルはitemtext_sym.txtです。
シンボリックリンクの作成コマンドはそれぞれ

になります。

絶対パスの確認コマンドは

または

になります。