Использование sed или awk для обновления строки - PullRequest
1 голос
/ 02 марта 2010

Я хочу открыть файл 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 ]

1 голос
/ 02 марта 2010

Вместо этого используйте Perl с флагом -i (inplace-edit).

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

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

1 голос
/ 02 марта 2010
#!/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
1 голос
/ 02 марта 2010

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

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