Emacs: Reemplazar texto en múltiples ficheros

2 minutos de lectura

Poco a poco sigo descubriendo cosas en el universo Emacs, normalmente cuando quiero buscar y sustituir una cadena de caracteres en uno o varias archivos utilizaba el comando sed, pero el otro día navegando por internet encontré un magnifica tip de como Reemplazar texto en múltiples ficheros, así que este articulo es básicamente un corta/pega de ese articulo, todo el mérito es suyo, lo dejo por aquí como siempre para mi yo futuro y para que no se pierda.

Selección de ficheros

Lo primero es abrir el directorio dónde están los ficheros a modificar. Lo puedes hacer con C-x d o bien con el menú en File→ Open Directory.

A continuación puedes mover el cursor sobre la lista de ficheros y marcar (m) o “desmarcar” (u) los ficheros que quieras.

Si quieres seleccionar con comodines, escribe % m y escribe un patrón, por ejemplo, para marcar todos los ficheros que acaban en html:

1% m .org$

Reemplazando

Ahora ejecuta el comando:

M-x dired-do-query-replace-regexp

En su lugar puedes utilizar la opción de menú: Operate→Query Replace in Files o simplemente pulsar Q.

Y emacs te pedirá el texto original y el que deseas poner es su lugar. Para cada ocurrencia que encuentre en cada uno de los ficheros marcados, deberás respondes si quieres reemplazar (y/n). Si quieres reemplazar todas pulsa !.

Para guardar los cambios, lo más fácil es:

1M-x save-some-buffers

Referencia: