Unix: Buscar y reemplazar
Publicado por Juan Pablo el 29.Dic.2007 | Comentarios (1)
Existe un millón de formas para buscar y reemplazar en Unix/Linux, aquí presento una de las más usadas, o al menos la que uso yo. El problema es el siguiente: Se quiere buscar y reemplazar la palabra “Duende” por “Pitufo” en el directorio “cuentos” y en todos sus subdirectorios.
grep -rlZ Duende /home/juque/cuentos | xargs -r0 perl -pi -i.bak -e 's/Duende/Pitufo/g'
- grep: comando unix, muestra las líneas que contienen el patrón de búsqueda dado como argumento.
- r: lee todos los archivos bajo el directorio de manera recursiva.
- lZ: suprime el salto de línea al lado de cada nombre de archivo, esto prepara la entrada para el comando perl.
- Duende : patrón de búsqueda para grep.
- | : (pipe) el resultado (o salida) del comando a la izquierda es tomado como entrada a la derecha.
- xargs : comando unix, separa la cantidad de argumentos para un comando en sublistas para que éste los pueda aceptar.
- r : si no se recibe entrada no se ejecuta el comando.
- 0 : evita los caracteres en blanco y los saltos de línea para el nombre de los archivos.
- perl: llama al interprete perl.
- p: conserva el patrón de búsqueda para su uso luego de la coincidencia (crea un loop).
- i: no importa mayúscula o minúscula.
- i.bak: agregará una extensión bak al archivo donde ocurrió la coincidencia (es un respaldo).
- e: ejecuta un comando perl.
- 's/Duende/Pitufo/g': comando perl; busca (s:search) 'Duende', lo cambia por 'Pitufo' en todo el archivo (g:global).
Es de tu entero riesgo dejar o no un respaldo, si no quieres dejar uno sólo quita el parámetro i.bak, ahora si dejaste un respaldo y compruebas que todo está en regla puedes eliminar todos los archivos respaldados con el siguiente comando:
find /home/juque/cuentos -name "*.bak" -exec rm -f {} \;
Tenlo presente: mucho cuidado cuando ejecutes estos comandos, son muy útiles y te pueden sacar de muchos apuros, pero al misto tiempo son peligrosos y te pueden dejar hasta desempleado.
Enlace Permanente, Comentarios (1), Publicada en: Lifehacks
Comentarios
- 1. Cristian Rodriguez
- 29.Dic.2007
Para esas tareas simples se suele utilizar mas sed(1) que perl (1) ;-)