유닉스에서 sed 명령 사용

유닉스에서 sed 명령 사용

파일에서 단어를 가져와 절대 경로로 변경하는 방법은 무엇입니까? 기본적으로 유닉스 파일에서 한 단어를 가져와 해당 파일 내의 절대 디렉토리 경로로 변경해야 합니다. 파일 이름은 httpd.conf입니다. 이 파일의 경로는 /home/Tina/apache/conf/httpd.conf입니다. 줄은 ServerRoot "/usr"입니다. "/usr"을 /home/Tina/apache로 변경해야 합니다.

Tina@Irv-PC ~/apache/conf
$ cat httpd.conf
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.

# Do not add a slash at the end of the directory path.
#
ServerRoot "/usr"

#
# DocumentRoot: The directory out of which you will serve your documents.
#
DocumentRoot "/Library/WebServer/Documents"

답변1

이 시도:

$ sed -i.orig '/ServerRoot/s_"/usr"_/home/Tina/apache_' /home/Tina/apache/conf/httpd.conf

주위에 큰따옴표를 넣으려면 다음을 수행하십시오 /home/Tina/apache.

$ sed -i.orig '/ServerRoot/s_"/usr"_"/home/Tina/apache"_' /home/Tina/apache/conf/httpd.conf

먼저 행에 "ServerRoot"( /ServerRoot/)가 포함되어 있으면 일치시키고, 그렇다면 필요한 대체( s_"/usr"_"/home/Tina/apache"_)를 수행합니다. /path 에서 사용한 것과 마찬가지로 대체 _구분 기호를 사용했습니다 sed. 수정된 파일은 이고 /home/Tina/apache/conf/httpd.conf원본 파일은 로 유지됩니다 /home/Tina/apache/conf/httpd.conf.orig.

답변2

부작용을 피하기 위해 전체 줄을 교체하겠습니다.

sed -i.bak -e 's#^ *ServerRoot  *"/usr" *$#ServerRoot "/home/Tina/apache"#' httpd.conf

\/일반적으로 "s/from/to/"가 사용되지만 사방에 슬래시가 있으므로 다른 문자를 사용하는 것이 현명하므로 표현식의 모든 경로 구분 기호에 대해 슬래시를 쓸 필요가 없습니다 . ^...$정확히 동일한 줄로 구성된 줄만 일치하도록 from 표현식을 사용합니다( 줄 ^의 시작, $줄의 끝).

Switch는 -i파일을 내부에서 편집하지만 에 백업됩니다 httpd.conf.bak. 이는 시스템 구성 파일을 편집할 때 매우 좋은 아이디어입니다.

대체 구분 기호를 지원 하지 않으면 sed시도해 볼 수 있습니다

sed -i.bak -e 's/^ *ServerRoot  *"\/usr" *$/ServerRoot "\/home\/Tina\/apache"/' httpd.conf

관련 정보