Aquí hay una pregunta de nuestro lector habitual, el Sr. Rajan. Quiere usar Sed
para buscar y reemplazar una línea entre rangos de patrones. Bueno, aquí hay una pregunta de él.
He estado escribiendo un script de shell para automatizar algunas tareas en VPS. Por ejemplo, quería modificar httpd.conf
y reemplace "AllowOverride None" to "AllowOverride All"
que se encuentra dentro de un <Directory "/var/www/html">
particular . La idea es reemplazar solo la línea dentro de ese bloque "/var/www/html"
). La razón por la que quería hacer esto es que tuve dificultades para configurar Apache para permitir anulaciones desde .htaccess
archivos.
Por ejemplo:en el siguiente código de httpd.conf
archivo, necesito buscar el patrón <Directory "/var/www/html">
y reemplace AllowOverride None con Permitir anular todo ubicado dentro de esta estructura de directorios sin afectar otra estructura de directorios.
<Directory "/var/www/html"> AllowOverride None </Directory>
Por favor ayúdame.
Uso de Sed para buscar y reemplazar una línea entre rangos de patrones
Esta parece ser una tarea para sed
, como sed
admite rangos de patrones en esta forma:
sed '/startpattern/,/endpattern/ <sed-commands>' file
Entonces, según el requisito de Rajan, debemos buscar el patrón de inicio <Directory "/var/www/html">
, patrón final </Directory>
y busque "AllowOverride None" and replace it with "AllowOverride all"
. Para hacer eso, el sed
El comando debe usarse como se muestra a continuación.
#sed -i '/<Directory "\/var\/www\/html">/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' httpd.conf
Aquí -i
opción es editar archivos en su lugar. Si no usa la opción -i
, la salida modificada se imprimirá en stdout
¡y el archivo no se cambiaría!