Sed 교체가 예상대로 작동하지 않음

Sed 교체가 예상대로 작동하지 않음

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.참고자료배쉬 매뉴얼

둘째, 문자열의 구분 기호를 /바꾸는 대신 다른 문자를 구분 기호로 사용할 수도 있습니다 ./

결과 :

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가 필요합니다.

관련 정보