いつも探してしまうperlでのファイル内文字列置換(その2)の続き?
よく考えたら(考えなくても(^^;)、複数行にマッチして、その行を特定のパターンに置き換えるだけなら、patchと言う強い武器があった。(ちょっと条件は付くが)
ここに、aaaa.txtと言うファイルがある。
<!--hogehoge--> <!--hogehoge-end-->この2つのタグの間に何かを挟みたいとする。
このaaaa.txtを下記のように書き換えたいとする。
<!--hogehoge--> abc def ghi jkl mno pqr stu vwx yz <!--hogehoge-end-->上記のファイルをbbbb.txtと言う名前で作る。
$ diff -p aaaa.txt bbbb.txt *** aaaa.txt Sat Oct 30 14:09:29 2004 --- bbbb.txt Sat Oct 30 14:09:49 2004 *************** *** 1,2 **** --- 1,5 ---- <!--hogehoge--*gt; + abc def ghi + jkl mno pqr + stu vwx yz <!--hogehoge-end-->間に挟む処理が書かれている。ここで、
diff -p aaaa.txt bbbb.txt > ab.patchとかで、patchfileを作成する。
後はfind -execで順にpatchを当てる...と良いはずだが、なんだかうまくいかない(--;
結局find -printで出た対象ファイル名をちょっと加工してshellに食わせて処理。
まぁいいか。
diffを使うのなら--edでedマクロ形式で出力すると良いかも知れませんね。
Posted by: ねぎ : 2004年10月30日 14:54似たようなことを http://www.luky.org/opensrc/ でやってました。だだし、タグは一つで置き換えるだけ、しかも真面目にファイルオープンしてソース読み込み。我ながら苦労してる。。patchがあったとは。。
Posted by: bae : 2004年11月 1日 01:52