HTMLファイル内のデータを一括変換する

今回はHTMLファイル内のデータ(カラーコードやクラス名など)の一括変換です。
MacOS Xの場合、変換する方法はいくつかあります。簡単なのはファイル内容を一括変換するアプリケーションを使う方法でしょう。アプリケーションなどを必要とせず標準のMacOS Xの場合はUNIXコマンドを使う方法があります。覚えておくと、いつか役に立つ時が来るかもしれません(?)
MacOS XでUNIXコマンド(シェル:bash)を使うにはターミナルを起動します。ターミナルはアプリケーションフォルダ内のユーティリティフォルダ内にあります。ダブルクリックして起動させましょう。
起動したら変換したいHTMLファイルがあるディレクトリに移動します。ターミナル上で

cd

(cdの後には半角空白をいれてください)と入力したらファインダ上のフォルダをターミナル上にドラッグドロップします。ドラッグドロップするフォルダは処理したいHTMLファイルがあるフォルダです。ドラッグドロップすると

cd /Users/dgcr/test

のように自動的にフォルダへのパスが入力されます。次にリターンキーを押します。これで目的のフォルダに移動した事になります。(直接パスを指定すれば、このような作業は不要です)
それでは、背景のカラー名がblueの場合、#0000ffに変換してみましょう(カラー名からカラーコードに変換するということです)。
以下のように入力してリターンキーを押してください。

perl -pi -e "s/bgcolor="blue"/bgcolor="#0000ff"/g" *.html

あっという間に処理が終わります。ファイル内容を確認してみましょう。ちゃんと背景色が変更されているでしょうか。うまく変更されていない場合は入力ミスか拡張子が.htmになっている可能性があります。確認してみてください。
上記の書式ですが以下のようになっています。

perl -pi -e "s/元の文字列/変換後の文字列/g" ファイル名

元の文字列には正規表現を使う事ができるので複雑な置換もできます。あと、上記で"を指定する場合は"のようにします。
正しくコマンドを入力したのに背景色部分が変更されていない場合があります。なぜでしょうか。例えば

<body bgcolor="blue">

では問題がなくても

<body BGCOLOR="blue">

<boyd bgColor="Blue">

のように大文字が混在している場合にパターンマッチせず対象外となってしまい置換されません。このような場合は以下のように/gを/giとします。

perl -pi -e "s/bgcolor="blue"/bgcolor="#0000ff"/gi" *.html

これで大文字小文字に関係なく背景色が変換されます。

背景色以外でも同様の方法で一括変換ができます。スタイルシートでクラス名を指定している場合に、クラス名を一括変更しなければいけなくなってしまったとしましょう。class="abc"をclass="def"にするには以下のように書きます。(必要に応じて/gは/giとしてください)

perl -pi -e "s/class="abc"/class="def"/g" *.html

せっかくclass名を変更したのに不要になったので削除したい場合は以下のようになります。

perl -pi -e "s/class="def"//g" *.html

class属性の前の半角スペースも削除したい場合にはclassの前に以下のように半角スペースを入れます。

perl -pi -e "s/class="def"//g" *.html

ここまでは、同じフォルダ内のHTMLファイルだけが置換対象でした。しかし、実際のWebサイトはサブフォルダがあり、複雑な入れ子になっている事が多くあります。このような場合、サブフォルダにあるHTMLファイルも一括して変換してくれないと手抜きをする意味がありません。
サブフォルダも含めて処理するには以下のように入力します。

perl -pi -e "s/bgcolor="blue"/bgcolor="#0000ff"/g" `find ./ -type f | grep html$`

変わったのは一番最後のファイル名の指定部分です。`find ./ -type f | grep html$`とすると現在のフォルダを含めてサブフォルダ内にある拡張子がhtmlファイルを自動的に抽出してくれます。実際に、検索結果を表示させることができます。以下のように入力してみてください。

find ./ -type f | grep html$

現在のフォルダ以下にあるHTMLファイルがリストアップされるはずです。./の部分は現在のフォルダのパスを示していますので、ここを

find /Users/dgcr/ -type f | grep html$

とするとUsersフォルダ内のdgcrフォルダ以下のHTMLファイルをリストアップしてくれます。
ここまで来れば、あとはいくらでもHTMLファイル内の文字やデータの一括変換が可能なはずです。ちなみにMacOS Xに限らずUNIXでPerlが動作する環境であれば、どこでも動作すると思います。




[サンプルをダウンロード]