ノート:以前に投稿した内容に基づいてこの質問を更新したため、一部の回答が私が尋ねたい内容と一致しない可能性があります。
サブディレクトリ内のファイルセット内のいくつかのテキストを検索し、ファイル名に "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')