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!