我有一个CSV文件,其中包含一些特殊字符及其HTML实体名称
ex:htm.csv
À,À
Á,Á
Â,Â
Ã,Ã
É,É
Ê,Ê
Í,Í
Ó,Ó
Ô,Ô
Õ,Õ
我有许多.php
个文件,其中包含这些特殊字符。我写了一个shell脚本
#!/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"
但问题是在使用$html
的内容时,它会打印$orig
而不是"&"
的内容。
答案 0 :(得分:5)
&
是一个特殊字符,表示s///
命令中的“整个匹配字符串”。使用\&
。
答案 1 :(得分:1)
使用任何字符作为命令分隔符,这是一个例子:
sed -Ei "s|$k|$j|g" filename.txt
答案 2 :(得分:0)
除了特殊字符外,您还可以使命令更安全,更短:
mv
支持sed
(就地替换),则无需-i
IFS
,您可以限制其范围&
$html
结果:
#!/bin/bash
while IFS="," read orig html
do
for fl in *.php
do
sed -i 's/'$orig'/'${html//&/\\&}'/g' "$fl"
done
done < "htm.csv"
如果它不适合您,请添加一个示例。可能还有其他特殊字符需要转义。