2013-02-03 2 views
2

명령 줄 "rename"을 사용하여 여러 마침표가 포함 된 일부 파일 이름을 변경하려고합니다. 예를 들면 다음과 같습니다. this.is.a.file.name.txtPerl 정규 표현식으로 마지막 발생을 제외한 모든 것을 제거합니다.

약간 주위를 둘러 보았습니다. 나는 거의 나를 거기서 데려 오는 몇 가지 예를 발견했지만 필요한대로 작동시키지 못합니다. 말할 필요도없이, 나는 정규식을 가진 아주 초보자입니다.

나는이 시도했다 :

이 결과
rename -v -n 's/\.(.+?)(?=\.)//' this.is.a.file.name.txt 

: 나는 다음과 같은 리소스에있는 예제를 수정하려고했지만, 내가 붙어있어

this.a.file.name.txt 

. PHP Regex: Select all except last occurrence Regex not replacing the last occurrence of a match

+2

입력 및 원하는 출력이 무엇인지 명확하게 보여 줄 수 있습니까? 파일 확장명을 제외한 모든 파일을 제거하려고합니까? – woemler

+0

@willOEM 예, 맞습니다. 파일 확장자 만 유지하려고합니다. 따라서 원하는 결과는 다음과 같습니다 :'thisisafilename.txt' – stotrami

답변

5

정규 표현식은 몇 가지 이유로 적합하지 않습니다. 첫째, 빈 문자열을 대체하는 것은 단지 기간이어야하며, 다음 기간 인 모든 항목을 기간과 일치시키고 제거해야합니다. 또한 한 번만하고 있습니다.

원하는 정규식은 /\.(?=.*\.)//g입니다. 이는 임의의 문자 수와 다른 마침표의 제로 너비 어설 션이 뒤따라 오는 마침표와 일치하며 가능한 많은 횟수 수행합니다.

+1

이것은 완벽하게 작동합니다. 나는 단순히 이것을 "s"앞에 붙이고이 확인을 받는다 : '$ rename -n -v 's /\.(?=.*\.)// g'sdv.sdgs.hsdgh.sdg.sdf' 'sdv.sdg.sdgs.hsdgh.sdg.sdf는 sdvsdgshsdghsdg.sdf'로 이름이 변경되었습니다. – stotrami

관련 문제