用sed意外替换&

Pri*_*iya 2 csv shell sed utf-8

我有一个包含一些特殊字符及其HTML实体名称的CSV文件

例如: htm.csv

À,À
Á,Á
Â,Â
Ã,Ã
É,É
Ê,Ê
Í,Í
Ó,Ó
Ô,Ô
Õ,Õ
Run Code Online (Sandbox Code Playgroud)

我有许多.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"
Run Code Online (Sandbox Code Playgroud)

但问题是当使用内容时$html,它是打印内容$orig而不是"&".

Ran*_*832 5

&是一个特殊字符,意思是s///命令中的"匹配整个字符串" .使用\&.