{1,2}와 같이 정규 표현식 수량자를 사용하여 명령 찾기


14

숫자 1-99로 끝나지만 다른 모든 파일을 제외하는 모든 파일을 찾는 find 명령 문자열을 만들려고했습니다.

예를 들어 내가 찾으려 myfile1 myfile99을 하지만 myfile456 하지 myfilebackup

내가 생각하고있는 정규 표현식 myfile[1-9]{1,2}이지만 find와 함께 작동하도록 할 수는 없습니다.

find . -regex '.*myfile[0-9]{1,2}' 또는 find . -iname 'myfile[0-9]{1,2}'

내가 볼 수있는 {1,2}것은 작동하지 않는 부분입니다.

(그러면 -name -regex교환 할 수 있습니까?)

도움을 주셔서 감사합니다.


1
-iname(및 -name) 이 구문이없는 globs를 사용하십시오 .
l0b0

답변:


10

당신은 시도 할 수 있습니다

find . -regex '.*myfile[0-9][0-9]?'

또는

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)

감사합니다-첫 번째 줄이 나를 위해 일하고 있습니다. 나는 이것을 -iname으로 시도했지만 구문을 지원하지 않거나 다른 일을하고 있다고 생각하지 않습니다.
Lukas88

17

GNU find가 있으면 다른 정규 표현식 유형을 사용할 수 있습니다.

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

GNU에 따르면 find사용 거세 이맥스 정규 표현식 구문을 이맥스 지원 - 기본적으로 \{from,to\}구문을하지만, 적어도 GNU는 find지원하지 않습니다.

이상하게도 참조 매뉴얼에는 sed정규 표현식 구문 에 대한 섹션이 포함되어 있지 않으므로 누가이를 지원하는지 알고 있습니다.


1
sedlike ed가의 별칭 인 것 posix-basic같으므로 POSIX BRE와 호환되어야합니다 (와 같은 일부 확장명을 지원하지만 \+). sed예를 들어 [\n], 백 슬래시 대신 개행과 일치하거나 nPOSIX에 필요한 GNU와 호환되지 않습니다 . 참조 -regextype posix-extendedPOSIX ERES (정도 .*myfile[0-9]{1,2}도 같은 확장자) \s또는\<
스테판 Chazelas가

나는 -regextype에 대해 몰랐다. 사용 -regextype egrep하면 백 슬래시를 피할 수있는 것처럼 보입니다.
Sridhar Sarnobat '
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.