Truco Linux: Cómo actualizar el contenido de ficheros de texto automáticamente con sed

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:

  • grep hace una búsqueda recursiva (-r) en el directorio /etc e imprime los nombres de lo ficheros coincidentes (-H).
  • cut extrae la primera columna (-f) indicando : como separador de las mismas (-d).
  • xargs recibe la lista de ficheros y se le pasa a sed uno a uno (si no sed actuaría sobre toda la lista a la vez, lo cual no puede hacer).
  • Finalmente sed realiza 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.