Sed substituir não está funcionando como esperado

0

Desejo substituir listen = 127.0.0.1:9000 por 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

Erro:

bash: -c: line 63: unexpected EOF while looking for matching '''
bash: -c: line 64: syntax error: unexpected end of file
    
por Adam Silver 26.04.2016 / 04:47

2 respostas

3

Primeiro, A single quote may not occur between single quotes, even when preceded by a backslash. , ref Manual de bash

Em segundo lugar, você pode querer usar algum outro caracter como separador ao invés de / , já que você tem / na string de substituição.

Então, como resultado:

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

não use -i , dê uma olhada na impressão para verificar se ela funciona como esperado.

    
por 26.04.2016 / 05:04
2

tente usar outros caracteres em vez de / para separação, talvez?

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

OR

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

O problema é que você não está escapando do / as \/ , mas usar o @ como separador irá corrigir o seu problema. Você pode usar qualquer separador no sed assim que estiver consistente.

E verdadeiro de @David, use aspas duplas de acordo com o manual do bash.

dica: todos os arquivos UX precisam de EOF na última linha vazia

    
por 26.04.2016 / 05:19