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