Ini pertanyaan dari pembaca reguler kami, Tuan Rajan. Dia ingin menggunakan Sed
untuk mencari dan mengganti garis di antara rentang pola. Nah, ini dia pertanyaan dari dia.
Saya telah menulis skrip shell untuk mengotomatisasi beberapa tugas di VPS. Misalnya, saya ingin mengubah
httpd.conf
dan ganti"AllowOverride None" to "AllowOverride All"
yang terletak di dalam<Directory "/var/www/html">
tertentu . Idenya adalah untuk mengganti hanya baris di dalam bloktertentu tanpa mempengaruhi blok lainnya (sebenarnya ada banyak, tapi saya khawatir tentang blok yang berisi "/var/www/html"
). Alasan saya ingin melakukan ini adalah, saya mengalami kesulitan dalam mengonfigurasi Apache untuk mengizinkan Override from.htaccess
file.Misalnya:Pada kode di bawah ini dari
httpd.conf
file, saya perlu mencari polanya<Directory "/var/www/html">
dan ganti AllowOverride None dengan AllowOverride All terletak di dalam struktur direktori ini tanpa mempengaruhi struktur direktori lainnya.<Directory "/var/www/html"> AllowOverride None </Directory>Tolong bantu saya.
Menggunakan Sed untuk Mencari &mengganti garis di antara rentang pola
Ini sepertinya tugas untuk sed
, sebagai sed
mendukung rentang pola dalam bentuk ini:
sed '/startpattern/,/endpattern/ <sed-commands>' file
Jadi sesuai kebutuhan Rajan, kita perlu mencari pola awal <Directory "/var/www/html">
, pola akhir </Directory>
dan temukan "AllowOverride None" and replace it with "AllowOverride all"
. Untuk melakukan itu, sed
perintah harus digunakan seperti yang ditunjukkan di bawah ini.
#sed -i '/<Directory "\/var\/www\/html">/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' httpd.conf
Di sini -i
opsinya adalah mengedit file di tempat. Jika Anda tidak menggunakan opsi -i
, maka output yang dimodifikasi akan dicetak pada stdout
dan file tidak akan diubah!