2010-03-02 79 views
1

我想打開httpd.conf文件並使用新參數更改LogFormat行。 準則是該行應以「LogFormat」開頭並以「combined」結尾使用sed或awk更新一行

以下是我如何手動執行的操作。我想以編程方式更改該行。

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 

回答

1

使用Perl來代替,其-i(就地編輯)標誌。

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

這將修改文件httpd.conf,將備份存儲在文件「httpd.conf.bak」中。用您想要的實際替換文字替換「替換」。

+0

Perl,awk,sed都可以完成這項工作。 – ghostdog74 2010-03-02 06:00:40

1

你可以嘗試這樣的:

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

添加-i選項以就地編輯文件(而不是寫入stdout)。 – Geerad 2010-03-02 06:36:32

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