Los administradores de sistemas Linux nos enfrentamos constantemente al problema de tener que cambiar un valor en varios ficheros de configuración a la vez, los cuales tienen siempre el formato de texto plano. Por ejemplo, si cambiamos la IP o el nombre de un equipo, hay que recorrerse todo el directorio /etc en busca de ficheros que contengan una referencia al dato antiguo y cambiarla por el nuevo. Esto, que evidentemente es un proceso tedioso si hay que hacerlo a mano, podemos afortunadamente automatizarlo con una de las herramientas de procesamiento de texto que Linux incluye de serie y que ha heredado de Unix: sed.
sed es una utilidad de línea de comandos y nos permite con una sintaxis muy sencilla sustituir una cadena de texto por otra, que incluso permite utilizar expresiones regulares para aplicar la sustitución a patrones de cadenas. La operación más básica de sed tendría la siguiente forma:
# sed 's/antigua/nueva/g' fichero_original > fichero_nuevo
Si no queremos crear un fichero nuevo sino cambiar el existente, incluimos el parámetro -i:
# sed -i 's/antigua/nueva/g' fichero_original > fichero_nuevo
Veamos entonces el ejemplo mencionado de tener que sustituir el nombre del sistema por uno nuevo. Para ello, realizaremos una búsqueda en /etc y modificaremos los ficheros que contengan la cadena a cambiar.
# grep -r -H equipo1 /etc | cut -f 1 -d ":" | xargs sed -i 's/equipo1/equipo2/g'
En la línea anterior combinamos varios comandos Linux para prepara la lista de ficheros a procesar y obtener el resultado deseado con sed:
grephace una búsqueda recursiva (-r) en el directorio/etce imprime los nombres de lo ficheros coincidentes (-H).cutextrae la primera columna (-f) indicando:como separador de las mismas (-d).xargsrecibe la lista de ficheros y se le pasa aseduno a uno (si nosedactuaría sobre toda la lista a la vez, lo cual no puede hacer).- Finalmente
sedrealiza la sustitución.
Este truco es también muy útil para los desarrolladores web, por ejemplo para actualizar plantillas o código fuente. Un aviso: hay que asegurarse de que la cadena a sustituir SÓLO aparece en los ficheros que nos interesan, ya que podemos sufrir el efecto secundario de cambiar lo que no deberíamos.
Espero que os sea de utilidad. Hasta el truco de la semana que viene.