3

我正在尝试创建一个补丁,用户可以使用 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,但在命令中已经使用了单引号。

有没有人对如何克服这个问题有任何想法?在此先感谢您的任何建议!

4

1 回答 1

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.

于 2013-08-01T16:00:03.620 回答