Pregunta :¿Cómo reemplazo todas las ocurrencias de una palabra en todos los archivos en la carpeta dada?
Considere un escenario problemático en el que tiene un sitio web en el que a menudo hace referencia al año en curso. Cada año es necesario actualizar el año. Puede encontrar fácilmente todas las ocurrencias en todos los archivos, pero debe evitarse cambiar manualmente el año, uno por uno, en cada archivo.
Solución
¿Entonces, Qué haces? Una de las varias formas de encontrar todas las ocurrencias y luego reemplazar el término buscado es usando una combinación de comandos find y sed.
Puede hacerlo fácilmente con un solo comando:en este ejemplo, tiene 50 páginas web en la carpeta de páginas. Este comando cambiará instantáneamente todas las apariciones de "2017" a "2018":
find ~/public_html/my_website/pages -type f -exec sed -i 's/2017/2018/g' {} \;
Para que el ejemplo anterior sea un poco más genérico, esto es lo que debe hacer:
find <path_to_directory> -type f -exec sed -i 's/<search_text>/<replace_text>/g' {} \;
En el comando anterior, reemplace
Explicación
Lo que está haciendo aquí es que está utilizando el comando de búsqueda para obtener todos los archivos en los directorios actuales y sus subdirectorios. La opción -type f se asegura de que solo obtenga archivos, no directorios.
Y luego pasa el resultado usando el comando exec al comando sed. El comando sed busca el texto y lo reemplaza.
Él {} \; es parte del comando exec. El espacio entre } y \ es obligatorio.
Este consejo rápido de Linux fue sugerido por Lector del Manual de Linux, Jane Hadley. ¿Tienes una mejor solución para este problema? Compártelo en los comentarios.