이 정규식에 Not Exists 절을 어떻게 추가합니까?

이 정규식에 Not Exists 절을 어떻게 추가합니까?

디렉토리를 반복하면서 다음 두 가지 조건을 찾으려고 합니다.

  1. .js로 끝나는 모든 파일
  2. .js로 끝나는 모든 파일아니요_test.js로 끝납니다

다음과 같이 위의 #1을 만족하는 정규 표현식이 있습니다.

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

위 #2의 조건을 추가하는 방법에 어려움을 겪고 있습니다. 정규식은 제가 약한 영역이고 이 두 가지 기준을 모두 만족하는 정규식을 작성하기 위해 올바른 문서를 보고 있는지 잘 모르겠습니다.

파일을 차단하기 위해 다음을 시도했지만 _test작동하지 않고 여전히 모든 파일을 반환합니다.

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

두 번째 요구 사항을 충족하기 위해 위의 정규식 문을 어떻게 수정할 수 있습니까?

답변1

-not나는 정말로 당신의 정규식을 이해하지 못합니다. 왜 괄호와 이중 부정문( 및 (?!...)) 이 모두 있습니까 ? 후자는 PCRE 정규식을 활성화하지 않는 한 -regextype아무런 효과가 없습니다 (옵션 참조).

이 간단한 정규식은 다음과 같이 작동합니다.

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

그러나 작업에는 정규식이 필요하지 않으며 간단한 파일 이름 일치만으로 충분합니다.

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

관련 정보