我需要改变数百个 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