web-dev-qa-db-ja.com

sedを使用してApache構成で.htaccessファイルを有効にする

Bashスクリプトを使用してUbuntuVagrantボックスのプロビジョニングを自動化しようとしています。すべて順調ですが、.htaccessファイルからのオーバーライドを許可するようにApacheを構成するのに問題があります。私の設定ファイルには、次のブロックがあります。

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

AllowOverride NoneAllowOverride allに置き換えるだけです。これはsedのタスクのようですが、この構成ファイルには、オーバーライドを許可したくない他の<Directory>ブロックがあります。

特定の文字列が他の2つの特定の文字列の間にある場合、sedを使用して特定の文字列を新しい文字列に置き換えるにはどうすればよいですか?

つまり、AllowOverride None<Directory /var/www/>の間にある場合にのみ、</Directory>を置き換えるにはどうすればよいですか?

次のコマンドを使用して、関心のあるブロックを取得できます。

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

sedは、次の形式のパターン範囲をサポートします。

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

例えば:

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