현재 폴더 CA01
아래에 두 개의 폴더가 있습니다 .CA02
foo
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)