11

Я пытаюсь автоматизировать настройку 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

1 ответ1

11

sed поддерживает диапазоны шаблонов в этой форме:

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

Например:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .