이 유틸리티를 사용하고 있습니다이름을 바꿔라여러 파일의 이름을 바꾸면 그룹 식별자 사이의 숫자를 이스케이프 처리하는 방법을 모르겠습니다. 이것은 기본적인 것임에 틀림없지만 저는 이런 상황을 겪어본 적이 없으며 직관이 올바른 이스케이프 문자를 찾는 데 도움이 되지 않습니다.
파일 이름의 숫자를 23
다음과 같이 바꾸고 싶습니다.
rename -n 's/(.*)([0-9]{2})(.*)/$1"23"$3/' *
$ rename -n 's/(.*)([0-9]{2})(.*)/$1"23"$3/' *
rename(Request22Message.json, Request"23"Message.json)
rename(Response22ExpectedMessage.json, Response"23"ExpectedMessage.json)
rename(Response22Message.json, Response"23"Message.json)
이 경우 점은 연결 문자로 처리될 수 있습니다.
$ rename -n 's/(.*)([0-9]{2})(.*)/$1.23.$3/' *
rename(Request22Message.json, Request.23.Message.json)
rename(Response22ExpectedMessage.json, Response.23.ExpectedMessage.json)
rename(Response22Message.json, Response.23.Message.json)
아니요.
답변1
실제로 숫자를 이스케이프 처리하는 문제는 아닙니다. $123
캡처 그룹으로 참조를 명확하게 하는 문제 입니다 123
. 이 상황 에 대한 사례는 perlre
아래 문서에 있습니다.$1 대신 경고\1
하려고 하면
s/(\d+)/\1000/;
말로 모호함을 없앨 수는 없지만
\{1}000
말로 모호함을 고칠 수는 있습니다${1}000
.
예를 들어
rename -n 's/(.*)([0-9]{2})(.*)/${1}23$3/' *.json
또는 (대칭을 위해)
rename -n 's/(.*)([0-9]{2})(.*)/${1}23${3}/' *.json
너할 수 있는문자열 연결 연산자를 사용 .
하지만 이를 위해서는 실행 플래그를 추가해야 합니다.
rename -n 's/(.*)([0-9]{2})(.*)/$1."23".$3/e' *.json