grepを使用して特定の拡張子と一致しないいくつかのファイルを除外する方法は?

grepを使用して特定の拡張子と一致しないいくつかのファイルを除外する方法は?

OKディレクトリからその単語を含むすべての行を繰り返し出力したいと思います。ただし、結果から一部の拡張子を除外する必要があります。

*~
*.map
*.js except *.debug.js

私は試した:

grep -r --exclude={*~,*.map} "OK" /some/dir

結果からデバッグではないファイルをすべて削除する方法がわかりません.js

ベストアンサー1

以下でgrep削除したいと思います。

grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'

一致を逆にし、-vパターンと一致しない行を印刷し、-PPerl準拠の正規表現を有効にすることで、次を使用できます。否定的なレビュー。この特定の正規表現は.js一致します。いいえ以前のdebug意味は(一致を逆にするため)、その.jsファイルだけが印刷されるという意味です。

しかし、@QuestionOverflowがコメントで指摘したように、フィルタリングという意図しない副作用があるかもしれません。ワイヤー含まれているOKため、jsファイルgrep -v名だけでなく出力全体に適用されます。これを防ぐには、コロンを追加するだけです(grepファイルの内容とファイル名を区別する役割)。

grep -r --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js:'

入力行にが含まれているか、foo.js:ファイル名にが含まれている:場合は、別のアプローチを使用してください。

grep -Tr --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js\t'

ファイル名とファイル内容の間にタブ文字が印刷されるようにします-T。したがって、正規表現の末尾にgrepaを追加すると、行の内容ではなくファイル名のみが一致します。\t

まだ、使用findとにかくそれはおそらくもっと意味があるでしょう。

おすすめ記事