1-99로 끝나는 모든 파일을 찾고 다른 모든 파일은 제외하는 찾기 명령 문자열을 만들려고했습니다. .
예 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
를 같은 의미로 사용할 수 있습니까?)
어떤 도움을 주셔서 감사합니다.
댓글
답변
해 볼 수 있습니다.
find . -regex ".*myfile[0-9][0-9]?"
또는
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
댓글
- 감사합니다. 첫 번째 줄은 worki 나를 위해 ng. -iname으로 시도했지만 '이 구문이 지원되지 않는다고 생각하거나 ' 뭔가 잘못하고 있습니다.
li>
Answer
GNU find가있는 경우 다른 정규 표현식 유형을 사용할 수 있습니다.
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
GNU에 따르면 find
는 중성 을 사용합니다. Emacs 정규식 구문 기본적으로-Emacs는 \{from,to\}
구문을 지원하지만 최소한 GNU find
는 지원하지 않습니다.
이상하게도 참조 설명서에는 sed
정규식 구문에 대한 섹션이 포함되어 있지 않으므로 누가 그 부분을 알고 있는지 알 수 있습니다. 지원됩니다.
댓글
-
sed
ed
는posix-basic
의 별칭으로 보이므로 POSIX BRE와 호환되어야합니다 (일부\+
와 같은 긴장). '는 GNUsed
와 호환되지 않습니다. 예를 들어[\n]
는 POSIX에 필요한 백 슬래시 또는n
POSIX ERE의 경우-regextype posix-extended
(즉.*myfile[0-9]{1,2}
)도 참조하세요. 또한\s
또는\<
- -regextype에 대해 전혀 몰랐습니다.
-regextype egrep
를 사용하면 백 슬래시를 피할 수있는 것 같습니다.
-iname
(및-name
)는 globs 를 사용합니다. 이 구문이 없습니다.