18 February 2009

sedでメタ文字(タブ、改行)などが扱えない。 perlで対処する

URLを羅列したファイルからsitemap.xmlを作るために、sedを使おうとした。

[user@localhost ~]% sed -E -e "s/^/<\/loc>\n\t<\/url>\n\t<url>\n\t\t<loc>/g" sitemap.txt </loc>nt</url>nt<url>ntt<loc>http://example.com/index2.html …

メタ文字(\tや\n)がまったく認識されていない。 Googleで原因を検索してみると、sedによってはメタ文字に対応していないようである。(メタ文字に対応するために、何らかの拡張機能を入れているとか何とか…)

回避措置として、perlで処理するスクリプトを書いてみる。

makesitemap.pl
#!/usr/bin/perl use strict; # テキスト形式のsitemapファイル(入力) my $strInFileName = './sitemap.txt'; # ファイルから一時的にデータを読み込む配列 my @aryData = []; my $strTmp; # ファイルハンドル my $hFile; if(!open($hFile, $strInFileName)) { # ファイルが開けない場合 print "ファイルが開けません\n"; exit; } @aryData = <$hFile>; close($hFile); foreach $strTmp (@aryData) { $strTmp =~ s/\n//g; $strTmp =~ s/^/<\/loc>\n\t<\/url>\n\t<url>\n\t\t<loc>/g; print $strTmp; }

1行で済むところが、20行くらい書かないといけない…

==参考文献など==
sedの文字列置換
http://www.gcd.org/sengoku/sedlec/
http://www.ishilab.net/~ishihara/tips/sed.txt
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/
http://www.kabipan.com/computer/sed/
Perlの文字列置換
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k08.htm