替换数百个文件的末尾

替换数百个文件的末尾

我需要改变数百个 Perl 模块的结束方式。目前它们结束为

1;

但是我需要修改它,以便它们都在最后几行中包含此内容。

BEGIN {
    # VERSION
}
1;
# ABSTRACT: table definition

当然,我确信我可以使用 Perl(可能使用 PPI)来完成此操作,但似乎我也可以sedawk结束这些文件。任何人都可以提供关于如何实现这一目标的任何建议吗?

答案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

相关内容