sed用其中的单引号替换字符串

时间:2014-12-10 00:15:04

标签: bash ssh sed escaping

我想使用bash脚本修改远程主机上存在的脚本。

我的bash脚本有这样的命令在远程主机上运行sed命令:

ssh user@domain.com "some_command"

我想用sed命令修改一个名为config.php的文件。

我想替换像这样的字符串

'debug' => true

用这个

'debug' => false

sed命令(不起作用)是这样的:

sed 's/'debug'->true/'debug'=>false/g' config.php > newconfig.php

使用什么是正确的sed命令,以及如何让它正确地转义ssh"中的所有字符。 "命令?

2 个答案:

答案 0 :(得分:0)

尝试这样做:

$ sed -r "s@('debug'\s*=>\s*).*@\1false@" file
'debug' => false

所以:

ssh user@host<<'EOF'
sed -i -r "s@('debug'\s*=>\s*).*@\1false@" /PATH/TO/config.php
EOF

答案 1 :(得分:0)

我刚刚对我的服务器进行了一些测试,这似乎有效。您可以尝试在sed命令中使用双引号但是将它们转义。

ssh user@domain.com "sed \"s/'debug' => true/'debug' => false/g\" /path/to/config.php > /path/to/newconfig.php"