수백 개의 Perl 모듈이 끝나는 방식을 변경해야 합니다. 현재 그들은 다음과 같이 끝납니다.
1;
하지만 마지막 몇 줄에 모두 이 내용이 포함되도록 수정해야 합니다.
BEGIN {
# VERSION
}
1;
# ABSTRACT: table definition
물론 Perl을 사용하여(아마도 PPI를 사용하여) 이 작업을 수행할 수 있다고 확신하지만 이러한 파일을 사용하여 끝낼 sed
수도 있는 것 같습니다. awk
누구든지 이를 달성하는 방법에 대한 조언을 제공할 수 있습니까?
답변1
$
실제로 이 작업은 GNU sed를 사용하여 매우 편리하게 수행할 수 있습니다. -i
마지막 줄에서 작업하고 파일을 내부에서 수정하는 기능이 결합되어 있기 때문입니다. 이것은 마지막 줄에 있다고 가정하고 1;
, 그렇지 않으면 더 복잡합니다.
sed -i -e '$s/^1;$/BEGIN {\
# VERSION\
}\
1;\
# ABSTRACT: table definition/' *.pm
Perl을 사용하면 파일이 작기 때문에 메모리에 완전히 로드되기만 하면 됩니다. 이것은 공백과 주석을 허용하고 __DATA__
다음을 허용하는 등 쉽게 보다 유연하게 만들 수 있습니다 1;
(POD 허용은 독자에게 연습으로 남겨둡니다).
perl -0777 -pe 's/\n\s*1\s*;(?=(?:\s*(?:#.*)?\n)*(?:\s*__(?:DATA|END)__\b)?\Z)/\nBEGIN…definition/' *.pm