Emacs: Reemplazar texto en múltiples ficheros
2021-07-19
Índice
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:
% 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:
Presionar "C-x s" y entonces pulsar "!" para salvar tods los buffers.
Referencia:
- Todo el mórito de este artículo corresponde a https://crysol.org/recipe/2007-11-30/gnu-emacs-reemplazar-texto-en-mltiples-ficheros.html