[〜#〜] note [〜#〜]:この質問を以前に投稿したものから更新したため、一部の回答が意図したものと一致しない場合があります。
サブディレクトリ内の一連のファイルでテキストを検索すると同時に、ファイル名に「svn」が含まれる特定のファイルの結果をスキップしたい。
どうすればそれを達成できますか?
詳細は正確に何をしたいかによって異なりますが、 ネガティブルックアラウンド が役立つ場合があります。 PCREを含む特定の正規表現言語はこれをサポートしています。 -P
スイッチを使用してgrep
でPCREをアクティブ化できるため、探している特定のパターンによっては、これらを使用して巧妙なことを実行できる場合がありますが、その価値はほとんどありません。努力。
ただし、更新を読んだら、それを行うためのはるかに優れた方法があります。 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/
ポジティブ検索(grep
)とネガティブ検索(grep -v
)の両方を実行する方法はありません。別の方法は、-E
(または同じことであるegrep
)を使用し、一方の文字列には一致するが他方には一致しない一致する正規表現を提供することです。
_--exclude
_が提供するよりも高度なgrepファイルの制御が必要な場合は、find
を使用してgrepのファイルのリストを作成できます。
$ grep 'whatever_you_want_to_find' $(find wherever_you_want_to_search -not -iregex 'whatever_you_want_to_ignore')