使用sed或awk更新一行

时间:2010-03-02 05:44:09

标签: sed awk

我想打开httpd.conf文件并使用新参数更改LogFormat行。 标准是该行应以“LogFormat”开头,并以“合并”一词结尾

以下是我手动操作的方法。我想以编程方式更改行。

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

3 个答案:

答案 0 :(得分:1)

您可以尝试以下方式:

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

答案 1 :(得分:1)

使用Perl,使用-i(inplace-edit)标记。

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

这将修改文件httpd.conf,将备份存储在“httpd.conf.bak”文件中。将“替换”替换为您想要的实际替换文本。

答案 2 :(得分: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