I have a CSV file containing some special characters and their HTML entity names
ex: htm.csv
À,À
Á,Á
Â,Â
Ã,Ã
É,É
Ê,Ê
Í,Í
Ó,Ó
Ô,Ô
Õ,Õ
and I have a number of .php
files where these special characters are present. I have written a shell script
#!/bin/bash
IFS=","
while read orig html
do
for fl in *.php; do
mv $fl $fl.old
sed 's/'$orig'/'$html'/g' $fl.old > $fl
done
done< "htm.csv"
but the problem is when using the contents of $html
, it is printing the contents of $orig
instead of "&"
.
Use any character as a command delimiter, here is an example:
In addition to the special characters you can also make the commands a bit safer and shorter:
mv
if yoursed
supports-i
(in-place replacement)IFS
for the rest of the commands you can limit its scope&
in$html
The result:
Please add an example if it doesn't work for you. There could be other special characters which would have to be escaped.
&
is a special character meaning "the whole matched string" in thes///
command. Use\&
.