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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35439
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2010-11-26 11:09:20

надо отредактировать конфиг апача.
в конец описания каждого виртуалхоста добавить по нескольку строк
т.е. имеем файл типа

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

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...
криво, косо, медленно, но реализуемо.

однако, должны же быть прмяые решения?
Убей их всех! Бог потом рассортирует...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

BSD_daemon
ефрейтор
Сообщения: 63
Зарегистрирован: 2010-10-09 21:51:17
Откуда: Из тех ворот откуда весь народ

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

Непрочитанное сообщение BSD_daemon » 2010-11-28 16:18:01

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

#!/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
После двух суток без сна лучше ничего в голову не пришло, но должно работать быстро.
I also known as: "Нефиг_чем_заняться"

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35439
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2010-12-03 11:51:52

работает
спасибо.
Убей их всех! Бог потом рассортирует...

BSD_daemon
ефрейтор
Сообщения: 63
Зарегистрирован: 2010-10-09 21:51:17
Откуда: Из тех ворот откуда весь народ

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

Непрочитанное сообщение BSD_daemon » 2010-12-11 1:53:11

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-ы в виртуальные хосты, которые уже имеют эти установки.
I also known as: "Нефиг_чем_заняться"

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35439
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2010-12-11 21:59:53

я лишнее грепом так и так вырезаю =)
Убей их всех! Бог потом рассортирует...