GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan Sed untuk Mencari &mengganti garis di antara rentang pola

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 blok tertentu 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!


Linux
  1. Menggunakan sed untuk menemukan dan mengganti file teks di Linux

  2. Pencocokan Pola Multiline Menggunakan Sed, Awk Atau Grep?

  3. Bagaimana Cara Mendapatkan Hitungan File Dalam Direktori Menggunakan Baris Perintah?

  1. Cetak Baris Sebelumnya Setelah Pencocokan Pola Menggunakan Sed?

  2. Temukan Nomor Baris Yang Berisi Pola Menggunakan Pembatas Regex Khusus?

  3. Ekstrak Nilai Antara Dua Pola Pencarian Pada Baris Yang Sama?

  1. Bisakah Sed Mengganti Karakter Baris Baru?

  2. Uji Pencarian Dan Ganti Sed Rekursif Sebelum Menjalankan?

  3. Bagaimana melakukan sed like text ganti dengan python?