파일에서 단어를 가져와 절대 경로로 변경하는 방법은 무엇입니까? 기본적으로 유닉스 파일에서 한 단어를 가져와 해당 파일 내의 절대 디렉토리 경로로 변경해야 합니다. 파일 이름은 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