色を追加したいアメリカ地図のSVGファイルがあります。時間がかかるので、bashスクリプトが使えると思いました。ステータスとそのステータスに属する色を含む他のファイルがあります。
SVGファイル:
<g id="hi">
<title>Hawaii</title>
<path class="state hi" d="m 233.08751,519.30948 ... z" id="HI" />
</g>
CSVファイル
HI, blue
私が望むもの:
<g id="hi" style="fill:blue;">
<title>Hawaii</title>
<path class="state hi" d="m 233.08751,519.30948 ... z" id="HI" />
</g>
grep
orを使うことができると思いましたが、sed
どこから始めるべきかわかりません。
ベストアンサー1
bashとGNU sedの使用:
while IFS=",$IFS" read id color
do
sed -i "s/g id=\"${id,,}\"/& style=\"fill:$color;\"/g" file.svg
done <file.csv
完了すると、file.svgは次のようになります。
<g id="hi" style="fill:blue;">
<title>Hawaii</title>
<path class="state hi" d="m 233.08751,519.30948 ... z" id="HI" />
</g>
どのように動作しますか?
while IFS=",$IFS" read id color; do
while
変数sumを読み込んでid
ループを開始しますcolor
。IFS
入力がコンマとスペースで区切られるようにコンマを追加します。sed -i "s/g id=\"${id,,}\"/& style=\"fill:$color;\"/g" file.svg
これにより、file.svgの内部更新が行われます。
id
bash:を使用して小文字に変換されます${id,,}
。その文字g id="${id,,}"
列を見つけますg id="${id,,} style="fill:$color;"
。注:
$id
と$color
sed コマンドに直接置き換えられます。あなたはこれをしなければなりません。〜しない限りfile.csv ファイルのソースを信頼します。done <file.csv
これで
while
ループが終了し、ループから読み取るように指示しますfile.csv
。
BSD(OSX)
BSDシステムを使用している場合は、sedコマンドを少し変更する必要があります。
while IFS=",$IFS" read id color
do
sed -i "" "s/g id=\"${id,,}\"/& style=\"fill:$color;\"/g" file.svg
done <file.csv