2010-03-02 6 views
1

Я хочу открыть файл httpd.conf и изменить строку LogFormat с новыми параметрами. Критерием будет то, что линия должна начинаться с «LogFormat» и заканчиваться словом «объединенный»Использование 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 (Inplace-редактирования) флага.

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

Это будет изменить файл httpd.conf на месте, хранить резервную копию в файле «httpd.conf.bak». Замените «замену» на нужный текст замены.

+0

Perl, awk, sed, все могут выполнять эту работу. – ghostdog74

1

Вы могли бы попробовать что-то вроде:

sed 's/^LogFormat.*combined$/new-logformat-line-whatever/' httpd.conf 
+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 
Смежные вопросы