2011年06月04日

正規表現を使った置換 - 最強のGUIエディタは?

前回のエントリで書いたように、今回の引っ越しでは一括ダウンロードした記事ごとのHTMLファイルから1個のMT形式ファイルを作成した。その際、合成にはcatコマンドを使い、整形にはエディタの検索・置換機能を使った。今回はその詳細を。

まず、catコマンドだけれど、これはコマンドアレルギーの私なんかが書くよりももっと信頼できる資料を読んでいただくほうがいい。ただ、終わってみて「あそこはこうすべきだった」という反省が2点あるので、そのメモ。
まず、ファイル名が「1.html, 2.html, ..., 9.html, 10.html, 11.html, ..., 100.html, 101.html, ...」という具合の連番になっていたのを、「001.html, 002.html, ..., 009.html, 010.html, 011.html, ..., 100.html, 101.html, ...」と、桁を揃えた正しい連番にリネームしておくべきだったということ。これは、catコマンドで合成したときにファイル名順になるからで、リネームしておかないと1、10、101、102、103、...、199、2、20、201、202、…みたいな変な順番になってしまうからだ。もっともこれは、MT形式でのインポートが済んだ後ではちゃんと日付順にソートされるので最終的には問題はない。ただ、目視でテキストを点検しているときに、日付順が狂っているのがやりにくかったとので、下処理はちゃんとしておくべきだったなと。
次に、コマンドはcat 1.html *.html > combined.txtのようにワイルドカード.*を使ったわけだけれど、このとき合成先のトップの1.htmlの内容が重複することに気がつかなかった。つまり、ワイルドカードで1.htmlも合成ファイルとして指定されてしまうわけだ。だから、正しくは、合成先のファイルを空白のhtmlにするかtxtにすべきだったなと思う。

とまあ、このあたりは瑣末な反省。さて、本命は整形。そして、ここではエディタの検索・置換機能を最大限に利用するわけだが、重要なのは正規表現を使った検索・置換が必要になるということ。

というのは、例えば単純にタグを削除するというのであればふつうに検索・置換すればいいのだけれど、例えばヘッダをごっそり削除したいというようなときには、<head>から</head>までの内容を指定して削除しなければならない。ところが、この間に入ってくる内容は記事ごとに異なるので、ワイルドカードを使わなければ指定ができないからだ。そして、ワイルドカードを指定できるのは正規表現ということになる。正規表現を使えるのはストーリーエディタであるSedということなのだけれど、コマンドで使うこのツールを、当然ながら私は使えない。だから、ここはどうあってもGUIのエディタが必要になるわけだ。ちなみに、正規表現に関する知識は、泥縄でこの辺りを参考にさせていただいた。

続きを読む
posted by 松本 at 09:43| Comment(0) | TrackBack(0) | 総記・雑記 | このブログの読者になる | 更新情報をチェックする