我想替换listen = 127.0.0.1:9000
为listen = '/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