何百ものファイルの終わりを置き換える

何百ものファイルの終わりを置き換える

何百もの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

おすすめ記事