수백 개의 파일 끝 바꾸기

수백 개의 파일 끝 바꾸기

수백 개의 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

관련 정보