Використання sed для ввімкнення файлів .htaccess у конфігурації Apache


13

Я намагаюся автоматизувати надання скриньки Ubuntu Vagrant за допомогою сценарію Bash. Все добре, але у мене виникають труднощі з налаштуванням Apache, щоб дозволити скасування .htaccessфайлів. У моєму конфігураційному файлі є такий блок:

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

Все потрібно мені зробити , це замінити AllowOverride Noneз AllowOverride all. Це здається завданням sed, але <Directory>в цьому файлі конфігурації є інші блоки, де я не хочу дозволити переопределення.

Як я можу використовувати sed для заміни конкретного рядка на новий рядок, коли ця конкретна рядок зустрічається між двома іншими певними рядками?

Іншими словами, як я можу замінити AllowOverride Noneлише тоді, коли він з’являється між <Directory /var/www/>і </Directory>?

Я можу використовувати таку команду, щоб отримати блок, який мене цікавить:

sed -n '/<Directory \/var\/www\/>/,/<\/Directory>/p' 000-default

Відповіді:


13

sed підтримує діапазони малюнків у такій формі:

sed '/startpattern/,/endpattern/ <sed-commands>' file

Наприклад:

sed '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' httpd.conf

Це те, що я шукав!
Капітанблак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.