この正規表現にNot Exists句を追加するにはどうすればよいですか?

この正規表現にNot Exists句を追加するにはどうすればよいですか?

ディレクトリを繰り返しながら、次の2つの条件を見つけようとします。

  1. .js で終わるすべてのファイル
  2. .js で終わるすべてのファイルいいえ_test.jsで終わる

次のように、上記の#1を満たす正規表現があります。

find . -iregex '.*\.\(js\)' -printf '"%p",\n'

上記#2の条件を追加する方法が困難です。正規表現は私が弱い領域であり、両方の基準を満たす正規表現を作成するために正しい文書を見ているかどうかわかりません。

ファイルをブロックしようとしましたが、うまくいかず、_testまだすべてのファイルを返します。

find . -iregex '.*\.\(js\)' -not -iregex '^(?!.*_test.*$)' -printf '"%p",\n'

2番目の要件を満たすために、上記の正規表現ステートメントをどのように変更できますか?

ベストアンサー1

-not私は本当にあなたの正規表現を理解していません。なぜ括弧と二重否定文(および(?!...))の両方がありますか?後者は、PCRE正規表現を有効にしない-regextype限り効果はありません(オプションを参照)。

この単純な正規表現は次のように動作します。

find . -type f -iregex ".*\.js" -not -iregex ".*_test\.js"

ただし、操作に正規表現は必要なく、単純なファイル名の一致で十分です。

find . -type f -iname "*.js" -not -iname "*_test.js"

おすすめ記事