ファイル名にPATTERNを含む特定のファイルを除き、一致するパターンを指定する方法

ファイル名にPATTERNを含む特定のファイルを除き、一致するパターンを指定する方法

ノート:以前に投稿した内容に基づいてこの質問を更新したため、一部の回答が私が尋ねたい内容と一致しない可能性があります。

サブディレクトリ内のファイルセット内のいくつかのテキストを検索し、ファイル名に "svn"を含む特定のファイルの結果をスキップしたいと思います。

どうすればいいですか?

答え1

詳細は正確に何をしたいかによって異なりますが、否定的な視線役に立つかもしれません。一部の正規表現言語(PCREを含む)がこれをサポートしています。grepスイッチを使用してPCREを有効にすること-Pができるので、探している特定のパターンに応じて、これを使用していくつかのきちんとした作業を実行できますが、努力する価値はありません。

ただし、アップデートを読んだ後は、これを行うより良い方法があります。grep利用可能なオプション-exclude:

   --exclude=GLOB
          Skip  files  whose  base  name  matches  GLOB  (using   wildcard
          matching).   A  file-name  glob  can  use  *,  ?,  and [...]  as
          wildcards, and \ to quote  a  wildcard  or  backslash  character
          literally.

だから、あなたは簡単に行うことができます

grep -Inr TEXT --exclude='*.svn' dir/

答え2

grep順方向検索()と否定検索(grep -v)を同時に実行することはできません。別の方法は-E(またはegrep同じ)を使用し、1つの文字列と一致しますが、他の文字列は一致しない一致正規表現を提供することです。

答え3

grepが提供するファイルに対してより高度な制御が必要であると判断された場合は、grepを使用してファイルのリストを生成--excludeできます。find

$ grep 'whatever_you_want_to_find' $(find wherever_you_want_to_search -not -iregex 'whatever_you_want_to_ignore')

関連情報