2014-05-10 3 views
0
use File::Find; 
find(sub { -f && /\.tmp$/ && unlink }, '.') 

* .tmp 파일을 삭제하기위한 Perl 스크립트. 내 문제는 * .tmp 또는 * .tmp2와 같은 여러 확장명을 검색하는 것입니다. 나는 약간의 변형을 시도했다.여러 대체 문자열에 대한 펄 정규 표현식 구문

find (sub { -f && /\.tmp$,.tmp2$/ && unlink }, '.') 

그러나 나는 간단한 구문 문제인지 확신 할 수 없다.

답변

0

정규 표현식을 사용해보십시오. 이 예에서는 tmp 문자열 다음의 임의의 숫자와 일치하도록 \d*을 추가했습니다. 한 - 라이너로

는 :

perl -MFile::Find -e 'find(sub { -f && m/\.tmp\d*$/ && unlink }, q|.|)' 
2

File::Find 정말 특정되지 않습니다. 일반 정규 표현식 검색 만 사용하고 있으므로 여러 확장자와 일치하는 정규식이 필요합니다 (예 :

/\.tmp2?$/ 

?은 앞서 식 (이 경우 2)이 선택적임을 의미한다. 보다 일반적인 경우 다음과 같이 쓸 수 있습니다.

/\.(ext1|ext2|ext3)$/ 

3 가지 다른 확장자와 일치시킵니다.

1

정규식 (여기 : /\.tmp$/ 또는또는 /\.tmp$,.tmp2$/)은 자체 언어입니다. 소개는 Perl Regular Expressions Tutorial입니다. |

/\.tmp$|\.tmp2$/ 

문자열이나 문자의 끝에 "리터럴 문자열 .tmp을 의미 : 다른 패턴을 지정하려면, 우리는 쉼표 (는 펄 정규 표현식에에 특별한 의미가 없습니다)하지만 파이프를 사용하지 않는 문자열 .tmp2 문자열 끝에 ". 우리는 "문자열의 끝 부분에 선택적으로 2 다음에 리터럴 문자열 .tmp를,"의미

/[.]tmp[2]?$/ 

으로이 문제를 단순화 할 수있다.