찾기 및 정규식

찾기 및 정규식

이 find 표현식에서 내가 무엇을 잘못했나요?

; touch ook ooks
; find . -name 'ook' -or -name 'ooks' -type f
./ook
./ooks
; find . -name 'ook[s]?' -type f      
[returns nothing]
; echo $?
0

답변1

정규식과 쉘 검색 패턴을 혼동하고 있습니다.

? 셸의 단일 문자를 나타냅니다.

? 정규식에서 이전 문자(또는 하위 패턴)가 선택 사항임을 나타냅니다.

노력하다:

find . -regex '.*ooks?' -type f

찾기 매뉴얼 페이지에서:

       -정규 표현식 패턴
              파일 이름이 정규식 패턴과 일치합니다. 이것은 게임이다
              검색하는 대신 전체 경로를 사용하세요. 예를 들어, 파일을 일치시키려면
              "./fubar3"이라는 이름의 정규식 ".*bar"를 사용할 수 있습니다. 또는
              '.*b.*3'이지만 'f.*r3'은 아닙니다. 정규식 이해
              find의 기본값은 Emacs 정규식이지만 작동합니다.
              이를 변경하려면 -regextype 옵션을 사용하십시오.

답변2

이 답변은 적어도 GNU 찾기에 적용됩니다.

-name일치를 위해 쉘 패턴을 사용하십시오. 정규식 일치를 수행하려면 다음을 사용하십시오 -regex.

 find . -regex '.*ook[s]?' -type f

-regex전체 경로를 일치시키려면 emacs 정규식을 사용하십시오. 정규식 유형은 변경될 수 있습니다 -regextype.

관련 정보