GNU/Linux >> Tutoriales Linux >  >> Linux

Uso de Sed para buscar y reemplazar una línea entre rangos de patrones

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 en particular sin afectar otros bloques (en realidad hay muchos, pero me preocupa el bloque que contiene "/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!


Linux
  1. Uso de sed para buscar y reemplazar archivos de texto en Linux

  2. ¿Coincidencia de patrones multilínea usando Sed, Awk o Grep?

  3. ¿Cómo obtener un recuento de archivos en un directorio usando la línea de comando?

  4. ¿Imprimir línea anterior después de una coincidencia de patrón usando Sed?

  5. ¿Encuentra el número de línea que contiene el patrón usando el delimitador Regex personalizado?

Cómo realizar una búsqueda de patrones en archivos usando Grep

Cómo quitar líneas de un archivo usando el comando Sed

Buscar y reemplazar con sed en directorios y subdirectorios

El concepto de 'Espacio de espera' y 'Espacio de patrón' en sed

Encuentre y reemplace texto en un archivo entre un rango de líneas usando sed

Reemplazo de sed multilínea