你好,我正在尝试使用
sed -i -e s/"$before"/"$after"/g ~/.A/$sfi
将文件 .A 中的一行从 $before 替换为 $after,但两个变量都包含字符 &,我认为这是导致无法正常工作的原因,有人能给出解决方案吗?非常感谢
答案1
替换部分中的 & 符号似乎引起了您的担忧。替换部分中的 & 符号被替换为与模式匹配的文本。示例:
$ before="time&again"
$ after="to&fro"
$ sed "s/$before/$after/" <<END
> hello
> world time&again !
> END
hello
world totime&againfro !
因此,匹配的文本time&again
被替换为to&fro
,但&
“to”和“fro”之间的文本本身被匹配的文本替换。
解决方案是在替换端转义“&”符号。使用bash 参数替换将得到期望的结果:
sed "s/$before/${after//&/\\&}/"