Użycie sed do włączenia plików .htaccess w konfiguracji Apache

13

Próbuję zautomatyzować obsługę administracyjną skrzynki Ubuntu Vagrant za pomocą skryptu Bash. Wszystko jest w porządku, ale mam problemy z konfiguracją Apache, aby zezwalać na zastępowanie .htaccessplików. W moim pliku konfiguracyjnym znajduje się następujący blok:

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

Wszystko muszę zrobić, to wymienić AllowOverride Nonez AllowOverride all. To wydaje się być zadaniem sed, ale <Directory>w tym pliku konfiguracyjnym są inne bloki, w których nie chcę zezwalać na zastąpienie.

Jak mogę użyć sed, aby zastąpić określony ciąg nowym ciągiem, gdy ten określony ciąg występuje między dwoma innymi określonymi ciągami?

Innymi słowy, w jaki sposób mogę zastąpić AllowOverride Nonetylko wtedy, gdy pojawia się pomiędzy <Directory /var/www/>i </Directory>?

Mogę użyć następującego polecenia, aby uzyskać blok, który mnie interesuje:

sed -n '/<Directory \/var\/www\/>/,/<\/Directory>/p' 000-default
Ćwiek
źródło

Odpowiedzi:

13

sed obsługuje zakresy wzorców w tej formie:

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

Na przykład:

sed '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' httpd.conf
podejrzenie
źródło
Właśnie tego szukałem!
captainblack 11.06.19