![GNU grep & find -regex: .regex가 필요한 이유는 무엇이며 POSIX 문자 클래스를 사용할 수 없는 이유는 무엇입니까?](https://linux55.com/image/178262/GNU%20grep%20%26amp%3B%20find%20-regex%3A%20.regex%EA%B0%80%20%ED%95%84%EC%9A%94%ED%95%9C%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0%20POSIX%20%EB%AC%B8%EC%9E%90%20%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%97%86%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 ~였다UNIX와 유사한 시스템 명명 지침을 따르지 않는 디렉토리에서 파일을 찾으려고 시도했습니다..
find 명령과 함께 사용하는 경우find <dir> -regex '.*[^-_./0-9a-zA-Z].*'
관심 있는 파일 반환.
위의 명령줄에 대한 내 질문은 다음과 같습니다.
- 우리에게 필요한 이유모든 문자
.
이전의 메타문자0 이상*
메타문자는 예상대로 작동하기 위해 정규식의 시작과 끝 부분에 배치됩니다. 처음 시도했을 때find <dir> -regex '*[^-_./0-9a-zA-Z]*'
아무 것도 반환되지 않았습니다 . - 또한
character ranges
정규식을POSIX character classes
다른 모든 항목에 해당하는 정규식 으로 바꾸면find <dir> -regex '.*[^-_./[:digit:][:lower:][:upper:]].*'
아무것도 반환하지 않습니다. 왜 이런 일이 발생합니까?
티아!
답변1
*
정규식 구문에서는 다음과 같습니다.수량자이전 정규식 원자(이 경우.
)에 적용됩니다. 이것은아니요쉘 패턴 일치 구문("globbing"이라고도 함)에서와 같이 그 자체는 "0개 이상의 메타 문자"입니다.이는 기본 Emacs 정규식 유형의 특별한 기능일 수 있습니다. 예를 들어 보다 친숙한 동작을 원하면
-regextype posix-basic
또는 를 사용해 보세요.-regextype egrep