![정규식은 유효하지만 '찾기'를 사용하여 파일과 일치하지 않습니다.](https://linux55.com/image/101563/%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%80%20%EC%9C%A0%ED%9A%A8%ED%95%98%EC%A7%80%EB%A7%8C%20'%EC%B0%BE%EA%B8%B0'%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
인접한 소문자와 대문자 사이에 공백을 두는 것을 목표로 파일을 camelCase 이름과 일치시키기 위해 이 명령을 실행하려고 하는데 find
아무 것도 일치하지 않습니다.
find -E . -regex "([a-z])([A-Z])"
일치시키려는 파일의 예는 다음과 같습니다.
./250 - ErosPhiliaAgape.mp3
이 파일에서 이 정규식을 테스트했습니다.여기그리고 경기는 성공적이었습니다.
내 명령에 내가 뭘 잘못하고 있는 거지 find
?
답변1
비슷한 것을 찾고 있을 수도 있습니다.
find . -name "*[a-z][A-Z]*"
답변2
Find는 -regex
파일 이름뿐만 아니라 전체 경로와 일치합니다. 즉, 을 찾으려면 '.*foo' foo`가 /path/to/foo
필요합니다 . 당신은 다음과 같은 것을 원합니다 :-regex
, and not just
find . -E -regex ".*[a-z][A-Z].*"
glob을 사용하는 것이 더 간단하고 -name
더 간단 합니다.제안그러나 정규식 대신 SYN을 전달하세요.
답변3
([a-z])([A-Z])
이는 불일치 로 인해 발생합니다 ./250 - ErosPhiliaAgape.mp3
. 실제로 ([a-z])([A-Z])
정확히 일치하는 문자는 2개뿐입니다. -regex
예고정된전체 경로를 일치시킵니다. 다음을 사용하여 -regex
파일을 검색 하려면이름에 다음이 포함됨정규식의 경우 다음과 같이 작성할 수 있습니다(BSD/macOS find
구문).
find -E . -regex '.*/[^/]*([a-z])([A-Z])[^/]*'
GNU는 다음과 유사한 등가물을 찾습니다.
find . -regextype posix-extended -regex '.*/[^/]*([a-z])([A-Z])[^/]*'