sed를 사용하여 텍스트 주석 처리를 해제하면 작동하지 않습니다.

sed를 사용하여 텍스트 주석 처리를 해제하면 작동하지 않습니다.

(nginx 구성) 파일에서 4줄 섹션의 주석 처리를 제거하려고 합니다. 사용 sed. 처음에 grep을 사용해 보았는데 정규식이 올바른 것 같았습니다.

$ grep ^#.*bny /etc/nginx/sites-enabled/default
#        location /bny {

#그러나 sed를 사용하여 줄의 시작 부분을 삭제하려고 하면 실패합니다.

$ sudo sed -i '/^#.*bny/,+3 s/^#+//' /etc/nginx/sites-enabled/default
$ grep ^#.*bny /etc/nginx/sites-enabled/default
#        location /bny {

나는 같은 전략을 사용하여 sed를 사용하여 해당 섹션에 주석을 달았으며 잘 작동했다고 생각합니다.

sudo sed -i '/bny/,+3 s/^/#/' /etc/nginx/sites-enabled/default

이중 댓글도 문제가 되지 않습니다. 내가 뭘 잘못하고 있는 걸까요?

답변1

+BRE(기본 정규 표현식) 구문에서는 리터럴이므로 대체 패턴이 일치할 수 없습니다.

s/^##*//, 또는 (GNU sed에서) 을 사용하거나 s/^#\{1,\}//또는 명령줄 옵션을 사용하여 s/^#\+//확장 정규식(ERE)으로 전환할 수 있습니다.-E-r

관련 정보