Linux와의 혼동 정규식 찾기

Linux와의 혼동 정규식 찾기

find저는 Linux 명령의 정규식 사용에 대해 매우 혼란스럽습니다.

나는 옵션이 있다는 것을 알고 있지만 regextype, 그것이 없으면 현재 매뉴얼 페이지에 따르면 Emacs 정규 표현식을 사용해야 합니다. 이 페이지문자 클래스가 지원된다고 말하는 것 같습니다("POSIX 기능 입니다 "). 그러나 내 실험에서는 이것이 실제로 문자 클래스를 처리하는 고대 방식이라는 사실을 제외하고 는 작동 [[:ascii:]]하거나 작동하지 않는 것으로 나타났습니다. 대신 이것을 사용해야 할 것 같은데 , 이는 다른 것 외에는 유니코드 문자에는 쓸모가 없습니다.[[:digit:]][[:alnum:]][a-zA-Z]

그래서 저는 regextype로 이동하여 가능한 설정 목록을 얻을 수 있다는 것을 발견했습니다 find -regextype help. 이는 다음을 제공합니다:

find: Unknown regular expression type ‘help’; valid types are ‘findutils-default’, ‘awk’, ‘egrep’, ‘ed’, ‘emacs’, ‘gnu-awk’, ‘grep’, ‘posix-awk’, ‘posix-basic’, ‘posix-egrep’, ‘posix-extended’, ‘posix-minimal-basic’, ‘sed’.

-regextype posix-basic...그래서 예를 들어 를 포함하면 다음과 같은 작업을 실행할 수 있다고 가정합니다 .

find . -maxdepth 1 -regextype posix-basic -regex .*\d.*

이는 결과를 생성하지만 내가 기대했던 결과는 아닙니다. 현재 디렉터리의 모든 파일과 폴더 이름에는 소문자 "d"가 있습니다! 모든 이름에는 최소한 하나의 숫자가 있어야 합니다.

나는 Stack Exchange에서 꽤 많은 Linux find정규식 질문을 살펴봤지만 "현대적인" 문자 클래스 처리를 보여주는 질문은 본 적이 없다고 생각합니다. regextype다음과 같은 작업을 처리할 수 있는 옵션 이 있습니까 ?

find . -maxdepth 1 -regextype ??? -regex '.*\d{3}\s+.*'

내 말은 "세 자리 숫자 뒤에 하나 이상의 공백 문자가 포함되어 있음"입니다. 즉, Java, Python, Javascript 등과 같은 일반 언어의 정규식 규칙과 같은 것입니까?

나중에 댓글을 토대로

다음은 연습입니다. 디렉토리를 만들고 그 안에 임의의 이름을 가진 파일을 몇 개 넣으세요. 그런 다음 "ctb117b", "ctb117c", "trt117a"라는 이름의 파일을 추가합니다.

그런 다음 "117" 파일을 분리하고 싶습니다. "xxx0009333qqq"라는 파일이 있을 수 있습니다. 따라서 최신 정규식 엔진을 사용하면 예를 들어 다음과 같이 됩니다(앞의 ./ 허용).

find . -regex './\w{3}\d\{3}.*' 

이러한 오래된 Linux 정규식 규칙을 사용하여 작동하려면 무엇을 작성해야 합니까?

find . -regextype posix-basic -regex '.*[[:digit:]]{3}.*' 

아무것도 생산되지 않습니다. '.*[[:digit:]]+.*'예를 들어 둘 다 아닙니다. 누구든지 충분히 관심이 있다면 귀하에게 적합한 것을 보여주세요(위 파일 목록).

답변1

나는 이것을 사용하는 것이 좋습니다:

find . -maxdepth 1 -regextype posix-extended -regex '.*[[:digit:]]{3}\s+.*'

관련 정보