Quisiera saber cuál es la mejor manera para editar un archivo de texto, sin tenerlo que hacer de manera secuencial... me explico, tenemos un archivo de configuración de Apache para un repositorio de Subversion así:
Código:
Básicamente significa que tenemos dos repositorios, al repositorio 01 pueden acceder desde las ip's con terminación (1 y 4) y al repositorio 02 al que se puede acceder desde las ips's con terminación 3 y 5. Ahora bien, si quisieramos agregar una nueva IP para que acceda al repositorio 02, lo que tengo que hacer es buscar la sección que corresponde a este repositorio y verificar qué IP's están habilitadas, si no existe la ip, entonces se agregaría al final... <Location /repositorio01> DAV svn SVNPath /svn/repositorios/repositorio01 AuthType Basic Require valid-user Deny from all Allow from 192.168.2.1 Allow from 192.168.2.4 <\Location> <Location /repositorio02> DAV svn SVNPath /svn/repositorios/repositorio02 AuthType Basic Require valid-user Deny from all Allow from 192.168.2.3 Allow from 192.168.2.4 <\Location>
Este proceso queremos automatizarlo desde un shell, en donde se envíen como parámetros el nombre del repositorio y la ip a agregar. así, si por ejemplo queremos agregar la ip 192.168.2.10 al repositorio 2 tendríamos que hacer lo siguiente:
Lo primero que se nos ocurre es hacer una búsqueda secuencial, es decir, leer línea por línea hasta encontrar una etiqueta la etiqueta de inicio del repositorio.
Código:
.<Location /repositorio02>
una vez que encontremos esta línea, continuar leyendo hasta encontrar la ip que queremos agregar (esto indicaría que ya está dada de alta)
Código:
O encontrar la línea de cierre del repositoriosAllow from 192.168.2.10
Código:
Si no se encontró la IP en el segmento, entonces se agrega al final, justo antes del cierre de la etiqueta.<\Location>
El archivo entonces debería quedar de la siguiente manera:
Código:
Esto me parece muy poco eficiente, quisiera saber si con los comandos como sed, grep, tail o algún otro para el manejo de textos se puede simplificar el proceso...<Location /repositorio01> DAV svn SVNPath /svn/repositorios/repositorio01 AuthType Basic Require valid-user Deny from all Allow from 192.168.2.1 Allow from 192.168.2.4 <\Location> <Location /repositorio02> DAV svn SVNPath /svn/repositorios/repositorio02 AuthType Basic Require valid-user Deny from all Allow from 192.168.2.3 Allow from 192.168.2.4 Allow from 192.168.2.10 <\Location>
De antemano gracias por las ideas que me puedan proporcionar.
Saludos
Leo.