Страница 1 из 1

sed/awk/etc.... - многострочная замена

Добавлено: 2010-11-26 11:09:20
Alex Keda
надо отредактировать конфиг апача.
в конец описания каждого виртуалхоста добавить по нескольку строк
т.е. имеем файл типа

Код: Выделить всё

srv0# cat srv0.inc
<Directory /home/srv0/data/www/www.test-hf.ru>
        Options +ExecCGI
</Directory>
<Directory /usr/local/share/cacti>
        Options +ExecCGI
</Directory>
<Directory /usr/local/share/cacti>
        Options +Includes
        AllowOverride FileInfo AuthConfig Limit Indexes Options
        Order allow,deny
        Allow from all
</Directory>

<VirtualHost 77.73.25.114:8080>
        ServerName www.test-hf.ru
        DocumentRoot /home/srv0/data/www/www.test-hf.ru
        AssignUserID srv0 srv0
        CustomLog /home/httpd-logs/www.test-hf.ru.access.log combined
        ErrorLog /home/httpd-logs/www.test-hf.ru.error.log
        ServerAdmin admin@host-food.ru
        ScriptAlias /cgi-bin/ /home/srv0/data/www/www.test-hf.ru/cgi-bin/
</VirtualHost>
<VirtualHost 77.73.25.114:8080>
        ServerName cacti.lissyara.su
        DocumentRoot /usr/local/share/cacti
        AssignUserID srv0 srv0
        CustomLog /home/httpd-logs/cacti.lissyara.su.access.log combined
        ErrorLog /home/httpd-logs/cacti.lissyara.su.error.log
        ServerAdmin admin@host-food.ru
        #ScriptAlias /cgi-bin/ /home/srv0/data/www/cacti.lissyara.su/cgi-bin/
</VirtualHost>
srv0#    

а на выхлопе получиться типа

Код: Выделить всё

srv0# cat srv0.inc
<Directory /home/srv0/data/www/www.test-hf.ru>
        Options +ExecCGI
</Directory>
<Directory /usr/local/share/cacti>
        Options +ExecCGI
</Directory>
<Directory /usr/local/share/cacti>
        Options +Includes
        AllowOverride FileInfo AuthConfig Limit Indexes Options
        Order allow,deny
        Allow from all
</Directory>

<VirtualHost 77.73.25.114:8080>
        ServerName www.test-hf.ru
        DocumentRoot /home/srv0/data/www/www.test-hf.ru
        AssignUserID srv0 srv0
        CustomLog /home/httpd-logs/www.test-hf.ru.access.log combined
        ErrorLog /home/httpd-logs/www.test-hf.ru.error.log
        ServerAdmin admin@host-food.ru
        ScriptAlias /cgi-bin/ /home/srv0/data/www/www.test-hf.ru/cgi-bin/
        php_admin_value open_basedir "/home/srv0/data:."
        php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f admin@lissyara.su"
        php_admin_value upload_tmp_dir "/home/srv0/data/mod-tmp"
        php_admin_value session.save_path "/home/srv0/data/mod-tmp"
        php_admin_value memory_limit "524288000"
        AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
        AddType application/x-httpd-php-source .phps
</VirtualHost>
<VirtualHost 77.73.25.114:8080>
        ServerName cacti.lissyara.su
        DocumentRoot /usr/local/share/cacti
        AssignUserID srv0 srv0
        CustomLog /home/httpd-logs/cacti.lissyara.su.access.log combined
        ErrorLog /home/httpd-logs/cacti.lissyara.su.error.log
        ServerAdmin admin@host-food.ru
        #ScriptAlias /cgi-bin/ /home/srv0/data/www/cacti.lissyara.su/cgi-bin/
        php_admin_value open_basedir "/home/srv0/data:."
        php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f admin@lissyara.su"
        php_admin_value upload_tmp_dir "/home/srv0/data/mod-tmp"
        php_admin_value session.save_path "/home/srv0/data/mod-tmp"
        php_admin_value memory_limit "524288000"
        AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
        AddType application/x-httpd-php-source .phps
</VirtualHost>
srv0#    
невкурю с какой стороны подступиться
пока тока идеи на шелле находить позицию </VirtualHost> резать файл по этому значению, к верхнему куску добавлять строки, потом прилеплять нижний. снова искать, проверяя что перед </VirtualHost> нет строки с AddType...
криво, косо, медленно, но реализуемо.

однако, должны же быть прмяые решения?

Re: sed/awk/etc.... - многострочная замена

Добавлено: 2010-11-28 16:18:01
BSD_daemon

Код: Выделить всё

#!/bin/sh

mv -f srv0.inc srv0.inc.bak

cat srv0.inc.bak | awk 'BEGIN {
    repl="" \
    "\tphp_admin_value open_basedir \"/home/srv0/data:.\"\n" \
    "\tphp_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f admin@lissyara.su\"\n" \
    "\tphp_admin_value upload_tmp_dir \"/home/srv0/data/mod-tmp\"\n" \
    "\tphp_admin_value session.save_path \"/home/srv0/data/mod-tmp\"\n" \
    "\tphp_admin_value memory_limit \"524288000\"\n" \
    "\tAddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\n" \
    "\tAddType application/x-httpd-php-source .phps\n" \
    "</VirtualHost>\n"
}
{
    if ($0 ~/\<\/VirtualHost\>/) {
        print repl;
    }else{
        print;
    }
}
' > srv0.inc

rm -f srv0.inc.bak
После двух суток без сна лучше ничего в голову не пришло, но должно работать быстро.

Re: sed/awk/etc.... - многострочная замена

Добавлено: 2010-12-03 11:51:52
Alex Keda
работает
спасибо.

Re: sed/awk/etc.... - многострочная замена

Добавлено: 2010-12-11 1:53:11
BSD_daemon
Alex Keda писал(а):работает
спасибо.
А, - не за что.

Я что то прошлый раз упустил из виду(вот до чего доводит не хватка сна ) что надо было еще проверять:
... проверяя что перед </VirtualHost> нет строки с AddType...
Подправил, может еще пригодится кому

Код: Выделить всё

#!/bin/sh

mv -f srv0.inc srv0.inc.bak

cat srv0.inc.bak | awk 'BEGIN {
    repl="" \
    "\tphp_admin_value open_basedir \"/home/srv0/data:.\"\n" \
    "\tphp_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f admin@lissyara.su\"\n" \
    "\tphp_admin_value upload_tmp_dir \"/home/srv0/data/mod-tmp\"\n" \
    "\tphp_admin_value session.save_path \"/home/srv0/data/mod-tmp\"\n" \
    "\tphp_admin_value memory_limit \"524288000\"\n" \
    "\tAddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\n" \
    "\tAddType application/x-httpd-php-source .phps\n" \
    "</VirtualHost>\n"
}
{
    if ($0 ~/^[ \t]*\<\/VirtualHost\>/ && previousLine !~/^[ \t]*AddType/) {
        print repl;
    }else{
        print;
    }
    previousLine=$0
}
' > srv0.inc

rm -f srv0.inc.bak

exit 0
Теперь не будет добавлять AdTyp-ы в виртуальные хосты, которые уже имеют эти установки.

Re: sed/awk/etc.... - многострочная замена

Добавлено: 2010-12-11 21:59:53
Alex Keda
я лишнее грепом так и так вырезаю =)