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

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

현재 폴더 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 {} +

아무것도 나타나지 않았는데, 정말 예상치 못한 일이었습니다.

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

여기서 뭔가 빠졌나요?

답변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) 

관련 정보