GNU grep & find -regex: .regex가 필요한 이유는 무엇이며 POSIX 문자 클래스를 사용할 수 없는 이유는 무엇입니까?

GNU grep & find -regex: .regex가 필요한 이유는 무엇이며 POSIX 문자 클래스를 사용할 수 없는 이유는 무엇입니까?

나는 ~였다UNIX와 유사한 시스템 명명 지침을 따르지 않는 디렉토리에서 파일을 찾으려고 시도했습니다..

find 명령과 함께 사용하는 경우find <dir> -regex '.*[^-_./0-9a-zA-Z].*' 관심 있는 파일 반환.

위의 명령줄에 대한 내 질문은 다음과 같습니다.

  1. 우리에게 필요한 이유모든 문자.이전의 메타문자0 이상 *메타문자는 예상대로 작동하기 위해 정규식의 시작과 끝 부분에 배치됩니다. 처음 시도했을 때 find <dir> -regex '*[^-_./0-9a-zA-Z]*'아무 것도 반환되지 않았습니다 .
  2. 또한 character ranges정규식을 POSIX character classes다른 모든 항목에 해당하는 정규식 으로 바꾸면 find <dir> -regex '.*[^-_./[:digit:][:lower:][:upper:]].*'아무것도 반환하지 않습니다. 왜 이런 일이 발생합니까?

티아!

답변1

  1. *정규식 구문에서는 다음과 같습니다.수량자이전 정규식 원자(이 경우 .)에 적용됩니다. 이것은아니요쉘 패턴 일치 구문("globbing"이라고도 함)에서와 같이 그 자체는 "0개 이상의 메타 문자"입니다.

  2. 이는 기본 Emacs 정규식 유형의 특별한 기능일 수 있습니다. 예를 들어 보다 친숙한 동작을 원하면 -regextype posix-basic또는 를 사용해 보세요.-regextype egrep

관련 정보