Ecco una domanda del nostro lettore abituale Mr. Rajan. Vuole usare Sed per cercare e sostituire una linea tra intervalli di pattern. Bene, ecco una sua domanda.
Ho scritto uno script di shell per automatizzare alcune attività su VPS. Ad esempio, volevo modificare httpd.conf e sostituisci "AllowOverride None" to "AllowOverride All" che si trova all'interno di una particolare <Directory "/var/www/html"> . L'idea è di sostituire solo la riga all'interno di quel particolare blocco "/var/www/html" ). Il motivo per cui volevo farlo è che ho avuto difficoltà a configurare Apache per consentire le sostituzioni da .htaccess file.
Ad esempio:nel codice seguente da httpd.conf file, devo cercare il pattern <Directory "/var/www/html"> e sostituisci AllowOverride Nessuno con Consenti sovrascrivi tutto che si trova all'interno di questa struttura di directory senza influenzare l'altra struttura di directory.
<Directory "/var/www/html"> AllowOverride None </Directory>
Per favore aiutami.
Utilizzo di Sed per cercare e sostituire una linea tra intervalli di pattern
Questo sembra essere un compito per sed , come sed supporta gli intervalli di pattern in questa forma:
sed '/startpattern/,/endpattern/ <sed-commands>' file
Quindi, come richiesto da Rajan, dobbiamo cercare il modello di partenza <Directory "/var/www/html"> , schema finale </Directory> e trova "AllowOverride None" and replace it with "AllowOverride all" . Per farlo, il sed il comando deve essere utilizzato come mostrato di seguito.
#sed -i '/<Directory "\/var\/www\/html">/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' httpd.conf
Qui -i l'opzione è quella di modificare i file sul posto. Se non utilizzi l'opzione -i , quindi l'output modificato verrà stampato su stdout e il file non verrebbe modificato!