ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

Linux grep, 再帰的にファイル内を検索する。パターンマッチも使える。

programing image

ファイル内を検索するとき、サブディレクトリも含めて検索するときはgrepコマンドでオプション(-r)を使います。

しかし、ふつうの検索で使えるものが再起検索では使えないなど、知っておかないと『なんでできないの?』とあせってしまいます。

grepの再帰検索のポイントを説明します。

再帰検索のディレクトリ指定はパターンが使えない

grep -r search-string [dir | file]

ここで大事なのが、オプション-rを使った再帰検索のとき、指定するディレクトリはパターンが使えません。

*tmp

proc*

など。指定できるのは、ディレクトリ名の完全名かアスタリスク(*)ひとつです。

アスタリスクを指定すると、カレントディレクトリ下すべてを検索対象にします。

なぜ、パターンが指定できないのでしょうか?『いや、使えるよ!』と思うでしょう。

でもgrepの仕様は、ふつうのgrep検索では使えるけど、再起検索では使えないです。

再帰検索で指定するディレクトリは、検索するトップディレクトリを指定する必要があるため、あいまいな指定は許されません。

それなら、次のような再帰検索はできないのか? と思うかもしれません。

パソコンをする人 上手く行った
*.phpだけを検索対象にしたい
パソコンをする人 上手く行った
binディレクトリは検索対象からはずしたい。

grepコマンドには、そのオプションが用意されています。

ファイル・ディレクトリの検索条件をつけたり、たとえば除外設定などができます。

ひとつひとつ見ていきましょう。

パターンにマッチするファイルだけ検索する

grep -r search-string [dir | file] --include=[pattern]

たとえば、PHPのソースファイルだけを検索したかったら、

--include=*.php

を指定します。

パターンにマッチするファイルを除外して検索する

grep -r search-string [dir | file] --exclude=[pattern]

たとえば、テンポラリファイルを検索対象からはずしたいときは、

--exclude=*.tmp

を指定します。

パターンにマッチするディレクトリを除外して検索する

grep -r search-string [dir | file] --exclude-dir=[pattern]

たとえば、binディレクトリを検索対象からはずしたいときは、

--exclude-dir=bin

を指定します。

除外設定ファイルを読み込んでから検索する

grep -r search-string [dir | file] --exclude-from=[config file]

ファイルパターンを設定ファイルにまとめることもできます。

除外設定ファイルの内容
*.txt
*.dat
*.tmp

条件を複数指定する

これらのオプションは同時に指定することもできます。また、複数の条件も指定できます。

複数の条件を指定するときは、

--include={.php,.txt}

のように、カンマで区切って中括弧でかこって指定します。

  • オプション(-r)を使う
  • 再帰検索の場合、指定するディレクトリにパターンは使えない
  • 対象を限定したり除外したい場合はオプション(--include, --exclude)を使う。
前の投稿
Linux vim, 効率的にカーソルを移動する。コマンドモードで素早く動かす。
Linux grep, 文字列の検索と抽出。パイプと一緒に使うのは日常茶飯事。
次の投稿
コメントを残す

*