2010-03-02 3 views
1

httpd.conf 파일을 열고 새 매개 변수로 LogFormat 행을 변경하려고합니다. 기준은 "LogFormat"으로 시작하고 "combined"이라는 단어로 끝나야합니다.sed 또는 awk를 사용하여 행을 업데이트하십시오.

다음은 수동으로 수행하는 방법입니다. 프로그래밍 방식으로 라인을 변경하고 싶습니다. 그 -i (인플레 이스 편집) 플래그 대신

sed 's/^LogFormat.*combined$/new-logformat-line-whatever/' httpd.conf 

답변

1

사용 펄 :

vi /etc/httpd/conf/httpd.conf 
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
LogFormat "\"%h\" \"%l\" \"%u\" \"%{%Y-%m-%d %H:%M:%S}t\" \"%r\" \"%>s\" \"%b\" \"%{Referer}i\" \"%{User-Agent}i\" \"%D\" \"%T\" \"%q\" \"%f\" \"%v\" " combined 
+0

펄, awk, sed, 모두 일을 할 수 있습니다. – ghostdog74

1

당신은 뭔가를 시도 할 수 있습니다.

perl -i.bak -pe 's/^LogFormat (.*) combined$/replacement/' httpd.conf 

이렇게하면 httpd.conf 파일을 수정하여 "httpd.conf.bak"파일에 백업을 저장합니다. "대체"를 원하는 대체 텍스트로 바꿉니다.

+5

-i 옵션을 추가하여 (표준 출력에 쓰는 것이 아니라) 현재 위치에서 파일을 편집하십시오. – Geerad

1
#!/bin/bash 

cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak 
awk 'BEGIN{ 
pat1="\\\"%{%Y-%m-%d %H:%M:%S}t\\\"" 
pat2="\\\"%D\\\" \\\"%T\\\" \\\"%q\\\" \\\"%f\\\" \\\"%v\\\"" 
} 
/^LogFormat.*combined/{ 
$5=pat1 
$NF=pat2"\042 combined" 
}1' file >temp 
mv temp /etc/httpd/conf/httpd.conf 
관련 문제