2013-02-12 2 views
0

두 개의 웹 페이지가 있습니다. 하나의 페이지가 손으로 만들어졌고 다른 하나는 Visual Studio 2010 (.aspx)과 함께 게시되었습니다. 이 파일의 내용을 수정하여 여러 스크립트 태그를 단일 스크립트 태그로 대체하려고합니다. 이 목표를 달성하기 위해 배치 파일에서 일부 Perl 코드를 실행하기 만하면됩니다.여러 줄로 Perl을 대체 할 수 없습니다.

펄 일괄 :

perl -pi.backup -e "s/<!--\s*<pack>\s*-->.*?<!--\s*<\/pack>\s*-->/<script src=\"pack.js\"><\/script>/s" file.aspx 

HTML 입력 :

<!-- <pack> --> 
<script src="file1.js" type="text/javascript"></script> 
<script src="file2.js" type="text/javascript"></script> 
<!-- </pack> --> 

HTML 출력 :

<script src="pack.js"></script> 

모두 여기 전 치환 후 펄 코드 및 HTML은 생성 된 파일은 모든 행을 하나로 모으지 않으면 업데이트되지 않지만 손으로 ​​만든 파일에는 잘 작동합니다. 문제는 linebreaks에서 비롯된 것 같지만 코드가 정확히 동일하므로 첫 번째 파일에서만 작동하는 이유를 알 수 없습니다.

답변

0

-p 스위치를 사용하여 Perl을 실행하면 각 줄에 코드가 실행되고 결과가 인쇄됩니다. 따라서 정규 표현식은 한 번에 한 줄의 파일 만보고 있으므로 패턴 전체를 일치시킬 수는 없습니다.

당신은 이런 식으로 뭔가를 할 수 :

perl -i.backup -e "undef $/; $_=<>; s/<!--\s*<pack>\s*-->.*?<!--\s*<\/pack>\s*-->/<script src=\"pack.js\"><\/script>/s; print" file.aspx 

그것은 $_에 전체 파일을 slurps, 다음 대체를 수행하고 같은 파일에 결과를 출력합니다.

+0

감사합니다. 작동합니다! 왜 내 버전이 두 파일 중 하나에 대해 작동하는지 설명해 주시겠습니까? – leaf

+1

@wared에서 손으로 만든 파일은 Perl이 인식하지 못하는 다른 형식의 줄 바꿈을 저장할 수 있습니다. –

+0

감사합니다. – leaf

관련 문제