Menggunakan sed untuk mengaktifkan file .htaccess di konfigurasi Apache

11

Saya mencoba untuk mengotomatiskan penyediaan kotak Ubuntu Vagrant dengan skrip Bash. Semua baik-baik saja, tetapi saya mengalami kesulitan dengan mengkonfigurasi Apache untuk memungkinkan penggantian dari .htaccess file. Di file konfigurasi saya, ada blok berikut:

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

Yang perlu saya lakukan hanyalah mengganti AllowOverride None dengan AllowOverride all. Ini tampaknya menjadi tugas untuk sed, tapi ada yang lain <Directory> blok dalam file konfigurasi ini di mana saya tidak ingin mengizinkan override.

Bagaimana saya bisa menggunakan sed untuk mengganti string tertentu dengan string baru, ketika string tertentu terjadi antara dua string spesifik lainnya?

Dengan kata lain, bagaimana saya bisa mengganti AllowOverride None hanya ketika muncul di antara <Directory /var/www/> dan </Directory>?

Saya dapat menggunakan perintah berikut untuk mendapatkan blok yang saya minati:

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

Jawaban:

11

sed mendukung rentang pola dalam formulir ini:

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

Sebagai contoh:

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