使用sed或awk更新行
我想打开httpd.conf文件并用新参数更改LogFormat行。 标准是该行应以“LogFormat”开头,以“combined”结尾 下面是我手动操作的方式。我想按程序更改行使用sed或awk更新行,sed,awk,Sed,Awk,我想打开httpd.conf文件并用新参数更改LogFormat行。 标准是该行应以“LogFormat”开头,以“combined”结尾 下面是我手动操作的方式。我想按程序更改行 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-
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
您可以尝试以下方法:
sed 's/^LogFormat.*combined$/new-logformat-line-whatever/' httpd.conf
改用Perl,使用它的
-i
(就地编辑)标志
这将修改文件httpd.conf,将备份存储在文件“httpd.conf.bak”中。将“replacement”替换为所需的实际替换文本。Perl、awk、sed都可以完成此任务。添加-i选项以就地编辑文件(而不是写入stdout)。
#!/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
#!/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