Sed 替换未按预期运行

Sed 替换未按预期运行

我想替换listen = 127.0.0.1:9000listen = '/var/run/php56-fpm.sock'

sudo sed -i 's/listen = 127.0.0.1:9000/listen = \'/var/run/php56-fpm.sock\'/g' /etc/php-fpm.d/www.conf

错误:

bash: -c: line 63: unexpected EOF while looking for matching `''
bash: -c: line 64: syntax error: unexpected end of file

答案1

首先,,A single quote may not occur between single quotes, even when preceded by a backslash.参考bash手册

其次,您可能想使用其他一些字符作为分隔符,而不是/替换/字符串中的分隔符。

结果是:

sudo sed "s#listen = 127.0.0.1:9000#listen = '/var/run/php56-fpm.sock'#g" /etc/php-fpm.d/www.conf

尚未使用-i,请查看打印输出以验证其是否按预期工作。

答案2

尝试使用其他字符而不是 / 进行分隔也许?

sudo sed -i "s@listen = 127.0.0.1:9000@listen = '/var/run/php56-fpm.sock'@g" /etc/php-fpm.d/www.conf

或者

sudo sed -i "s/listen = 127.0.0.1:9000/listen = '\/var\/run\/php56-fpm.sock'/g" /etc/php-fpm.d/www.conf

问题是您没有转义/as\/但使用 @ 作为分隔符可以解决您的问题。只要一致,您就可以在 sed 中使用任何分隔符。

来自 @David 的说法是正确的,请按照 bash 手册使用双引号。

提示:所有 UX 文件的最后一个空行都需要 EOF

相关内容