sed - 왜 작동하지 않나요?

sed - 왜 작동하지 않나요?

방금 bash 스크립트를 사용하여 php.ini 파일의 설정을 바꾸려고 했습니다.

내 상황은 다음과 같습니다.

매우 구체적인 설정이 있으며 기본값은 다음과 같습니다.

;date.timezone =

이제 나는 그것을 다음으로 바꾸려고 노력합니다 sed.

date.timezone = "America/Mexico_City"

내가 사용하려는 명령은 다음과 같습니다.

sed -i '/^;date\.timezone[[:space:]]=.*$/date.timezone = "America/Mexico_City"' php.ini

하지만 나는 그것을 이해합니다:

sed: -e expression #1, char 35: extra characters after command

이유는 잘 모르겠지만 문자 하나만 남겨두면 작동합니다(예상한 방식은 아니지만 오류를 반환하지 않습니다). 예:

sed -i '/^;date\.timezone[[:space:]]=.*$/d' php.ini

이것은 단지 줄을 제거합니다;date.timezone =

저는 sed를 처음 접했고 도움을 주시면 정말 감사하겠습니다.

감사해요

답변1

당신은 노력하고 있습니다에스s한 패턴을 다른 패턴으로 바꾸려면 다음 형식의 sed 명령을 사용해야 합니다.

's/pattern/replacement/'

또한 패턴을 이스케이프 /하거나 문자열의 모든 문자를 바꿔야 합니다(귀하의 경우 "America\/Mexico_City"). 그래서

sed 's/^;date\.timezone[[:space:]]=.*$/date.timezone = "America\/Mexico_City"/'

또는 구분 기호를 다른 패턴으로 대체하여 슬래시를 이스케이프하는 것을 방지할 수 있습니다 s#pattern#replacement#.

sed 's#^;date\.timezone[[:space:]]=.*$#date.timezone = "America/Mexico_City"#'

관련 정보