1

我有sedFile.txt格式为字符串的文件CONNECTION='mysql://user:user@10.79.19.2:3308/SSMS/SUBSCRIBE';

我创建了一个脚本,其中包含以下几行:

fin=CONNECTION='mysql://user:user@10.79.19.2:3308/SSMS/SUBSCRIBE';  
repla=connection  
sed  -i "s/\$fin/$repla/g" /home/sedFile.txt 

即使脚本正在运行,它也不会在我的文件中进行更改。

我试过以下:

sed  -i 's/${fin}/${repla}/g' /home/sedFile.txt  
sed  -i 's/^$fin/$repla/g' /home/sedFile.txt  
sed  -i "s/$fin/$repla/g" /home/sedFile.txt  
sed  -i "s/${fin}/${repla}/g" /home/sedFile.txt
4

3 回答 3

1

可能与其他答案相同,但我不会伤害尝试

fin="CONNECTION='mysql://user:user@10.79.19.2:3308/SSMS/SUBSCRIBE';"
repla="connection"
sed -i "s|${fin}|${repla}|g" /home/sedFile.txt
于 2012-09-04T13:01:58.607 回答
1

如果您希望单引号包含在模式中,您必须引用或转义它们:

fin="CONNECTION='mysql://user:user@10.79.19.2:3308/SSMS/SUBSCRIBE'"

然后,使用您尝试过的四行中的任何一行(即不是带有 的那一行\$fin)。

更新:为了使sed工作,您不能使用/分隔模式和替换,因为该字符已经存在于字符串中。使用不同的分隔符:

sed -i "s,$fin,$repla,g" /home/sedFile.txt
于 2012-09-04T11:18:42.993 回答
0
fin="CONNECTION='mysql://user:user@10.79.19.2:3308/SSMS/SUBSCRIBE'"
repla=connection
  in=$fin out=$repla perl -pi.nk -e 's/\Q$ENV{"in"}/$ENV{"out"}/g'  /home/sedFile.txt
于 2012-09-04T12:49:01.087 回答