まとめて置換


某地方自治体のサイトのリニューアル作業中に運悪く?関係する別の自治体のサイトもリニューアルされた。

リニューアルついでに、リンク先の変更もしようということになったのだが、なんせ5,000ページもあるコンテンツをいちいち手作業でリンク先の変更をするのは大変ということで、ビフォーアフターのタブ区切りテキストを作ってまとめて変換することにした。

さいわい、こちらの方はCMSを使っているのでデータベースのデータをダンプしてそのファイルにたいしてスクリプトを走らすことになった。

というわけで、以下のスクリプトを作った。
やっつけで作ったのだが、こういうのはまたいつか需要があるかもしれないということで。

#!/usr/bin/perl

#
# タブ区切りテキストをベースに置換を行う
#
# 第一引数は変換用のタブ区切りテキスト
# (1列目が変更前、2列目が変更後)
# 第二引数は、変更を適用するテキストファイル
# (SQLなど)
#

$convert = shift @ARGV;
$sql = shift @ARGV;

open(IN, $convert);
my %url;
while(<IN>){
    ($from, $to) = split(/\t/, $_);
    $from =~ s/^\s*(.+)\s*$/\1/;
    $to =~ s/^\s*(.+)\s*$/\1/;
    if(!$from || !$to){
        next;
    }
    $url{$from} = $to;
}
close(IN);

open(DUMP, $sql);
while(<DUMP>){
    $line = $_;
    foreach $from(keys %url){
        $line =~ s/$from/$url{$from}/g;
    }
    print $line;
}
close(DUMP);

exit;

関連する記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>