sed를 사용하여 특정 텍스트 파일의 Linux 경로를 바꾸는 방법

sed를 사용하여 특정 텍스트 파일의 Linux 경로를 바꾸는 방법

NGINX를 구성하는 방법에 대한 일부 문서에 몇 가지 명령을 작성 중입니다. 나는 "vi로 열기"라고 쓰고 누군가가 그 모든 것을 알기를 기대하고 싶지 않습니다. 나는 단지 이 sed 명령을 실행하라고 말할 것입니다.

sed를 사용한 것은 이번이 처음입니다.

파일에 항목이 포함되어 있습니다.

server {
    {{{{{{OTHER STUFF}}}}}}}

    root /var/www/html;

    {{{{{{MORE STUFF}}}}}}
} 

/var/www으로 교체 하고 삭제하고 싶습니다 html.

슬래시와 중첩으로 어려움을 겪고 있습니다. 파일에 "root"라는 단어가 다른 경우도 있습니다.

이건 작동하지 않아

sed -i 's//var/www/html//var/www/g' default

답변1

sedGNU 명령에는 다른 구분 기호 sed가 허용됩니다. 그렇지 않으면 패턴에 표시되지 않을 구분 기호를 사용할 수 있습니다./이스케이프 하거나 다른 특수 문자를 사용해야 합니다..

sed 's% /var/www/html% /var/www%' default

또한 최신 GNU는 sedoptions 사용 시 내부 대체를 지원합니다 -i. MAC 및 FreeBSD 사용자의 경우 -i ''.

또한 이 -i.back옵션을 사용하여 파일 사본을 생성하는 백업을 얻을 수도 있습니다 default.back.

답변2

sed모든 문자를 패턴 구분 기호로 사용할 수 있습니다.

sed -i 's#root /var/www/stuff#root /var/www#' somefile 

g한 줄에 여러 개의 일치 항목을 기대하지 않기 때문에 이 수정자는 여기에서는 쓸모가 없습니다.

이식성을 위해:

sed 's#root /var/www/stuff#root /var/www#' somefile >newfile && mv newfile somefile

문서의 경우 "편집기에서 이 줄을 변경하세요"라고 말하면 됩니다. nginx를 설정하는 경우 편집기 사용 방법을 알고 있어야 합니다.

일반적으로 구성 파일의 내용을 변경하는 경우(일회성 편집인 경우) 수동으로 수행하면 오류가 발생할 가능성이 줄어듭니다. 이렇게 하면 제대로 조립되지 않은 정규 표현식이 제어 범위를 벗어나 의도하지 않은 방식으로 내용을 변경할 위험이 없습니다.

답변3

sed -i 's/\/var\/www\/html/\/var\/www/g' filename.txt

그러나 더 나은 답변을 얻을 수 있습니다.

관련 정보