我正在尝试创建一个补丁,用户可以使用sed以预定义的方式远程编辑文件,我可以在每台计算机上手动执行此操作,但这需要很长时间。
我正在努力的路线如下:
host=[hostname]
port=[portnum]
ssh -t $host -p $port "cp ~/file1 ~/file1.bak ; sed -i \"s/fcn1('param1', $2)\n/fcn2('param2'):$zoom\n/g\" ~/file1"
这会备份file1,然后在文件中编辑一行。我实际上想要编辑多行,但这一行演示了以下问题: 如果在sed命令中没有使用$符号,则命令有效。
我已尝试过多种逃避这些$符号的方法,但似乎找不到有效的方法。 我可以用一个。发现中的通配符,但显然不在替换字符串中。
我会为sed命令使用单引号,以避免扩展$ 2,但是在命令中已经使用了单引号。
有没有人对如何克服这个问题有任何想法?提前感谢任何建议!
答案 0 :(得分:3)
这也应该有效:
ssh -t $host -p $port "cp ~/file1 ~/file1.bak && sed -i \"s/fcn1('param1', \\\$2)/fcn2('param2'):\\\$zoom/g\" file1"
你需要3个反斜杠,因为你必须将远程bash中传递的字符串中的$符号转义为sed
。当你通过ssh
发送它时,你必须逃避反斜杠和$符号。