정규식과 파일 필터링에 사용되는 와일드카드의 차이점

정규식과 파일 필터링에 사용되는 와일드카드의 차이점

*를 사용하여 에서 0개 이상의 이전 문자를 나타내는 반면 , 와 같은 명령과 함께 사용하면 모든 C 파일을 찾는 grep데 사용됩니다 . *.c이 두 가지 경우에 사용법의 차이점이 무엇인지 말해 줄 수 있는 사람이 있습니까?lsls *.c*

답변1

쉘 파일 이름 글로빙그리고일반적인 표현동일한 문자 중 일부가 사용되며 비슷한 목적으로 사용되지만 맞습니다. 호환되지 않습니다. 파일 이름 글로빙은 덜 강력한 시스템입니다.

파일 이름 글로빙에서:

  • *"0개 이상의 문자"를 의미합니다.

  • ?"모든 단일 문자"를 의미합니다.

그러나 정규식에서는 .*"0개 이상의 문자"를 의미하고 ."모든 단일 문자"를 의미하려면 to를 사용해야 합니다. A는 ?정규식에서 완전히 다른 의미를 갖습니다. 즉, 이전 RE 요소의 인스턴스가 0개 또는 1개 있습니다.

대괄호( [])는 내가 이 글을 쓰고 있는 시스템의 두 시스템 모두에서 동일하게 작동하는 것 같습니다. 적어도 간단한 경우에는 말이죠. 여기에는 POSIX 문자 클래스(예 : ) [:alpha:]가 포함됩니다. 즉, 다양한 시스템 유형에서 작업하기 위해 명령이 필요한 경우 문자 목록(예: [abeq]) 및 문자 범위(예: [a-c])와 같은 기본 사항 이외의 항목을 사용하지 않는 것이 좋습니다.

이러한 차이점은 두 시스템이 단순한 경우에만 직접 상호 교환 가능하다는 것을 의미합니다. 파일 이름의 정규식 일치가 필요한 경우 다른 방법을 사용해야 합니다. find -regex선택이다. ( find -name참고로 glob 문법도 있으니 참고하세요.)

답변2

원래 제목에 표현된 질문에 대답하려면 다음을 수행하십시오.

정규식은 파일을 필터링하는 데 사용되는 표현식과 어떻게 다릅니까?

파일 이름 확장은 정규식보다 앞서며 대부분의 운영 체제(와일드카드/조커 문자)에 이미 존재하며 후자보다 더 간단하고 직관적입니다.

*.txt일반 사용자에게는 이해하기 쉽지만 이와 .*\.txt같은 내용은 숙련된 사용자/프로그래머에게 더 적합합니다 ^.*\.txt$.

관련 정보