web-dev-qa-db-ja.com

ファイル名にPATTERNが含まれる一部のファイルを除外しながら、一致するパターンを指定する方法

[〜#〜] 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/
2
terdon

ポジティブ検索(grep)とネガティブ検索(grep -v)の両方を実行する方法はありません。別の方法は、-E(または同じことであるegrep)を使用し、一方の文字列には一致するが他方には一致しない一致する正規表現を提供することです。

1
phoops

_--exclude_が提供するよりも高度なgrepファイルの制御が必要な場合は、findを使用してgrepのファイルのリストを作成できます。

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

0
user61786