이 Perl 정규식은 왜 역참조를 캡처하지 않습니까?

이 Perl 정규식은 왜 역참조를 캡처하지 않습니까?

파일 디렉토리가 있습니다

$ ls -1
ep2.mp4
ep3.mp4
ep4.mp4
ep5.mp4
ep6.mp4
ep7.mp4

renamePerl 유틸리티를 사용하여 모든 파일을 다음과 같이 만들고 싶습니다 .

ep02.mp4 

내가 사용하는 명령

rename -n "s/([0-9])/0${1}/" *.mp4

현재 결과

ep2.mp4 renamed as ep0.mp4
ep3.mp4 renamed as ep0.mp4
ep4.mp4 renamed as ep0.mp4
ep5.mp4 renamed as ep0.mp4
ep6.mp4 renamed as ep0.mp4
ep7.mp4 renamed as ep0.mp4

원래 번호를 캡처하여 새 파일 이름에 삽입하려면 어떻게 해야 합니까?

답변1

\대체 명령문 주위에 작은따옴표(또는 이스케이프)를 사용하십시오. 그렇지 않으면 쉘이 이를 ${1}변수로 처리합니다.

그래서 당신은 이것을 할 수 있습니다 :

rename -n 's/([0-9])/0${1}/' *.mp4

또는

rename -n "s/([0-9])/0\${1}/" *.mp4

관련 정보