Bash 将带有特殊字符的表达式替换为另一个shell脚本或sed中的表达式

Bash 将带有特殊字符的表达式替换为另一个shell脚本或sed中的表达式,bash,sed,special-characters,Bash,Sed,Special Characters,在文件x中,包含4*4*1 4*4*0的行将替换为文件y中的4*4*1*4*0。我正在使用以下代码: #!/bin/bash old=`grep "4*4" x`; new=`grep "4*4" y`; sed -i "s/${old}/${new}/g" x 但是它在x中没有产生任何变化。我是一个新手,这对于这个网站来说可能是一个愚蠢的问题,但我无法用另一个表达式替换多个特殊字符。欢迎来到stackOverflow-一个很棒的开发者平台*是一个特殊字符,一个量词,你需要避开它,\*4*4意

在文件
x
中,包含
4*4*1 4*4*0
的行将替换为文件
y
中的
4*4*1*4*0
。我正在使用以下代码:

#!/bin/bash
old=`grep "4*4" x`;
new=`grep "4*4" y`;
sed -i "s/${old}/${new}/g" x

但是它在
x
中没有产生任何变化。我是一个新手,这对于这个网站来说可能是一个愚蠢的问题,但我无法用另一个表达式替换多个特殊字符。

欢迎来到stackOverflow-一个很棒的开发者平台
*
是一个特殊字符,一个量词,你需要避开它,
\*
4*4
意味着“
4
零次或多次,后跟
4
”到
grep
。由于这是Bash,我们只需使用参数子项:
${old//\*/\*/\*}
。请参阅我的(相关)@TobySpeight
sed
版本对于像我这样的web+移动开发人员来说更具可读性。我同意bash的参数替换总是比任何其他方法都要快。你想做哪种权衡嗯……对否决我答案的人说:你能告诉我原因吗?这样我就能改进它。@VinayVissh t谢谢