Buscar & Reemplazar texto en varios documentos desde la línea de comandos
Si se siente cómodo con la línea de comandos y alguna vez se encuentra en una situación en la que necesita buscar y reemplazar una palabra, frase, URL o carácter en un grupo de varios documentos de texto, Perl hace el trabajo bastante bien. Una cadena de comando simple realizará muy rápidamente una búsqueda y reemplazo por lotes grupales en el texto, ya sea en un solo documento o en un grupo de varios documentos.
Al igual que muchas cosas en la línea de comandos, no hay un proceso de confirmación, por lo que querrá asegurarse de que su sintaxis esté configurada correctamente antes de iniciar un comando, de lo contrario, es posible que deba hacer otra búsqueda y reemplazo para reparar su error tipográfico.
La sintaxis básica del comando es la siguiente: perl -pi -w -e 's/THIS/THAT/g;' /ruta/a/los/archivos.txt
Para un ejemplo de una sola palabra, si necesita reemplazar todas las instancias de "ogre" con "cornbread" en cada archivo .txt dentro de la carpeta "Documentos", entonces usaría el siguiente comando:
perl -pi -w -e 's/ogre/cornbread/g;' ~/Documentos/.txt
Para ver un ejemplo de cómo encontrar y reemplazar una frase completa, supongamos que vamos a reemplazar la oración completa “La fábrica de chocolate ” con “El mago de Oz” en un grupo de archivos .txt que comienzan con “Películas” almacenados en el directorio Documentos:
perl -pi -w -e 's/La fábrica de chocolate/El mago de Oz/g;' ~/Documentos/Películas.txt
La búsqueda y el reemplazo se realizan inmediatamente. Puede volver a comprobar el cambio utilizando cat y grep para comprobar:
cat ~/Documentos/Films124.txt |grep Mago de Oz"
Es cierto que esto es bastante avanzado, y sí, la búsqueda y reemplazo por lotes a través de múltiples documentos se puede hacer de una manera más fácil de usar a través de aplicaciones GUI como TextWrangler y BBEdit, pero a veces la línea de comando es más rápida para tareas rápidas como esta y otras similares, además no requiere descargas adicionales para usar.
Muchas gracias a Lifehacker por el excelente truco.
Update: El comando 'sed' es otra forma de buscar y reemplazar rápidamente a través de la línea de comandos. Cubrir sed es principalmente un tema para otro artículo, pero la sintaxis básica del uso de sed para esta tarea es un poco más simple y, por lo tanto, más fácil de recordar:
sed -i 's/ESTO/AQUELLO/g' /ruta/a/archivos.txt
No existe una forma correcta o incorrecta, por lo que si usa perl o sed se convierte en una cuestión de preferencia personal.