Con frecuencia necesitamos cambiar ciertas variables o campos de un fichero de configuración para adaptarlo a nuestro sistema. Cuando esto se convierte en una tarea repetitiva y sobre todo cuando son muchos los valores a cambiar, se hace interesante automatizar este proceso.
Una forma de hacerlo es a través de algún script, en mi caso lo he hecho en python.
En dicho script definimos las variables a buscar y los nuevos valores a tomar. Recorrerá el fichero buscando coincidencias con las variables y les pondrá los valores que hemos indicado (independientemente de si tienen o no ya un valor). Sería algo así:
Una forma de hacerlo es a través de algún script, en mi caso lo he hecho en python.
En dicho script definimos las variables a buscar y los nuevos valores a tomar. Recorrerá el fichero buscando coincidencias con las variables y les pondrá los valores que hemos indicado (independientemente de si tienen o no ya un valor). Sería algo así:
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
"""
USO:
sustituye.py fichero_origen > fichero_destino
Este script toma un argumento por la linea de comandos: el nombre del fichero a parsear.
El resultado lo podemos redirigir a un nuevo fichero o ver como quedaría por pantalla.
"""
from cStringIO import StringIO
import re, sys
#Conjunto de variables a parsear
var1 = re.compile(r'(variable_1=)(\s+)?(\S+)')
var2 = re.compile(r'(variable_2=)(\s+)?(\S+)')
#Nuevos valores que deben tomar las variables
nuevo_valor_var1 = 'nuevo valor'
nuevo_valor_var2 = 'nuevo valor 2'
def cambia_variables(fichero):
conf_file = StringIO(fichero)
for line in conf_file:
match = var1.search(line)
match2 = var2.search(line)
if match:
sub_line = var1.sub(r'\1%s' % nuevo_valor_var1, line)
line = sub_line
if match2:
sub_line = var2.sub(r'\1%s' % nuevo_valor_var2, line)
line = sub_line
yield line
if __name__ == '__main__':
if not len(sys.argv) > 1:
print __doc__
sys.exit(1)
infile_name = sys.argv[1]
try:
infile = open(infile_name, 'r')
except IOError:
print "Debe especificar un fichero valido a parsear."
print __doc__
sys.exit(1)
fichero = sys.argv[1]
cadena_fichero = open(fichero).read()
for line in cambia_variables(cadena_fichero):
print line,
Como argumento recibe el nombre del fichero a parsear, y mostrará por la salida estandar cómo quedaría el fichero. Se puede redirigir la salida a un nuevo fichero.
En el ejemplo (muy básico) busca las siguientes variables:
En el ejemplo (muy básico) busca las siguientes variables:
variable_1=
y
variable_2=
y les otorga los valores:
nuevo valor
y
nuevo valor2
respectivamente.
Comentarios
Publicar un comentario