[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: cambiar cadena de caracteres por otra en archivos



Ipsissima verba Anibal Duardo:
> Por ahi vi que este tema ya se trató, pero no entiendo bien.  Yo
> necesito cambiar una cadena "oracle" por otra "nuevooracle" dentro
> de unos cuantos archivos debajo de un directorio y sus
> subdirectorios. No son muchos en total unos 19900, jejeje.
> 	creo que jonh puso algo como
> 
> 	perl -pi -e 's/oracle/nuevooracle/g' *
> 
> Como hago para que esto sea recursivo en subdirectorios, he estado
> tratando de encontrarlo en perl pero no lo logro, ya que ni idea de
> perl que tengo, je

Usar Perl para esto es matar pulgas con escopeta, en mi opinión.

Yo usaría algo como:

  find /home/alguien/dir -type f -name '*.txt' -exec \
   sh -c 'echo "$0"; (sed -e "s/oracle/nuevooracle/g" < "$0" > "$0".tmp) \
          && mv "$0".tmp "$0"' '{}' ';'

Nota que esto es muy peligroso.  Deberías correr primero el find con
los criterios de búsqueda, pero sin el exec, para ver que no se estén
procesando cosas que no deben; y deberías ejecutar la línea completa
sobre un directorio de prueba, con copias de algunos de los archivos,
y verificar que se haga lo que quieres, antes de correrlo sobre el
directorio real.

Finalmente, esto no es particularmente rápido, por la invocación a sh
en cada iteración; ni particularmente limpio, porque se sobreescriben
incluso archivos en los que no se hizo ningún reemplazo.  Una solución
más limpia probablemente requeriría un script en forma (en sh o en
Perl, como gustes)...

... lo cual se deja como ejercicio para el lector :-)

 -CR

-- 
Ceterum censeo: SCO delenda est.



Reply to: