정규 표현식 찾기에서 중괄호 표현식이 작동하지 않습니다.

정규 표현식 찾기에서 중괄호 표현식이 작동하지 않습니다.

두 개의 폴더가 있고 현재 폴더 아래에 다음이 CA01있습니다 .CA02foo

foo -+
     |
     +-CA01
     |
     +-CA02

내가 입력할 때

find . -regex ".*CA[0-9]+" -exec echo {} +

또는

find . -regex ".*CA[0-9][0-9]" -exec echo {} +

예상되는 결과는 다음과 같습니다.

./CA01 ./CA02

그런데 입력을 해보니

find . -regex ".*CA[0-9]\{2\}" -exec echo {} +

아무것도 나타나지 않는데 이는 전혀 예상치 못한 일입니다.

기본적으로 findemacs 정규식을 사용하기 때문입니다. 위의 모든 내용을 사용하여 두 폴더를 일치시킬 수 있습니다.

여기서 뭔가 빠졌나요?

답변1

-regextype을 반복 횟수를 지원하는 것으로 변경해야 합니다 (예: {2}). 기본값은 emacs개수를 지원하지 않는 것 같습니다. 기본 정규식 유형은 반복 횟수에 대한 구문이 없는 이전 버전의 Emacs를 모방합니다. 아래 유형이 저에게 적합한 것 같습니다.

posix-egrep

$ find foo -regextype posix-egrep -regex ".*CA[0-9]{2}" -exec echo {} +
foo/CA02 foo/CA01

sed

$ find foo -regextype sed -regex ".*CA[0-9]\{2\}" -exec echo {} +
foo/CA02 foo/CA01

posix 확장

$ find foo -regextype posix-extended -regex ".*CA[0-9]{2}" -exec echo {} +
foo/CA02 foo/CA01

다른 것들도 있지만 더 이상 시도하지 않았습니다. 매뉴얼 페이지를 참조 find하여 를 검색하십시오 -regextype.

발췌

-regextype type
       Changes  the  regular  expression  syntax  understood by -regex and 
       -iregex tests which occur later on the command line.  Currently
       implemented types are emacs (this is the default), posix-awk, 
       posix-basic, posix-egrep and posix-extended.

내 버전의 찾기

$ find -version
find (GNU findutils) 4.5.9
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version 1778ee9e7d0e150a37db66a0e51c1a56755aab4f
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2) 

관련 정보