Usando o bash e o GNU sed:
while IFS=",$IFS" read id color
do
sed -i "s/g id=\"${id,,}\"/& style=\"fill:$color;\"/g" file.svg
done <file.csv
Depois disso, file.svg se parece com:
<g id="hi" style="fill:blue;">
<title>Hawaii</title>
<path class="state hi" d="m 233.08751,519.30948 ... z" id="HI" />
</g>
Como funciona
-
while IFS=",$IFS" read id color; do
Isso inicia um loop
while
lendo as variáveisid
ecolor
. Adicionamos uma vírgula aIFS
para que a entrada seja dividida em vírgulas e em espaço em branco. -
sed -i "s/g id=\"${id,,}\"/& style=\"fill:$color;\"/g" file.svg
Isso faz uma atualização no local do arquivo.svg. Isso usa o bash para converter
id
para minúsculas:${id,,}
. Ele procura a stringg id="${id,,}"
e a substitui porg id="${id,,} style="fill:$color;"
.Nota:
$id
e$color
são substituídos diretamente em um comando sed. Você deve fazer isso somente se confiar na fonte do arquivo file.csv. -
done <file.csv
Isso conclui o loop
while
e instrui a leitura defile.csv
.
BSD (OSX)
Se você estiver em um sistema BSD, precisamos fazer uma pequena alteração no comando sed:
while IFS=",$IFS" read id color
do
sed -i "" "s/g id=\"${id,,}\"/& style=\"fill:$color;\"/g" file.svg
done <file.csv