2011-04-12 4 views
69

find 명령의 정규식을 사용하는 데 문제가 있습니다. 아마도 커맨드 라인에서 벗어나는 것에 대해 이해할 수없는 무언가 일 것입니다.linux 정규식 찾기

왜 이것들이 동일하지 않습니까?

find -regex '.*[1234567890]' 
find -regex '.*[[:digit:]]' 

강타, 우분투

+0

출력이 틀림 없음을 표시해야합니까? – shellter

답변

50

정규 표현식은 find에서 사용하는 기본 정규 표현식 구문에서 지원되지 않습니다. 그들을 사용하려면 posix-extended과 같은 다른 regex 유형을 지정해야합니다.

GNU Find의 정규 표현식 documentation을 살펴보십시오.이 정규 표현식은 모든 정규식 유형과 지원 대상을 보여줍니다.

+0

고마워요. 그 문서는 제가 찾고 있었어야합니다. 내가 찾을 수있는 것은 http://www.gnu.org/software/emacs/manual/html_node/elisp/CharClasses.html#Char-Classes - 캐릭터 클래스 *가 "emacs regex"에서 지원되었다고 생각하는 것 같았다. 방법". – Dijkstra

+1

[Regular_expression # Character_classes] (http://en.wikipedia.org/wiki/Regular_expression#Character_classes)도 확인 - 매우 유용한 리소스 – asoundmove

67

당신은 find-regextype 인수에보고해야한다, manpage를 참조하십시오

 -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. 

내가 emacs 유형이 [[:digit:]] 구조를 지원하지 않는 것 같아요. 나는 posix-extended 그것을 시도하고 예상대로 일 :

find -regextype posix-extended -regex '.*[1234567890]' 
find -regextype posix-extended -regex '.*[[:digit:]]' 
+2

그럴 수도 있다고 생각했지만 이맥스 정규식 정의를 확인한 후 [: digit :]를 지원하는 것으로 보입니다. http://www.gnu.org/software/emacs/manual/html_node/elisp/Char-Classes.html#Char-Classes – Dijkstra

2

글쎄, 당신은 -regex은 전체 경로에 따라 달라이 '.*[0-9]'

+3

이것은 그의 질문에 대한 대답이 아닙니다. 당신은 방금 그의 정규식을 다시 썼습니다. –

27

주를 시도 할 수 있습니다.

-regex pattern 
       File name matches regular expression pattern. 
       This is a match on the whole path, not a search. 

당신은 실제로 당신이 무엇을하고 있는지에 대한 -regex을 사용할 필요가 없습니다. 문자 클래스 (예를 들어, [[:digit:]])와

find . -iname "*[0-9]" 
+2

여기에 또 다른 점은 불필요합니다.) –

관련 문제