Re: Buscar y reemplazar en varios archivos
Ipsissima verba Debian User:
> On Friday 26 March 2004 18:12, "Sergio Ruiz Pérez - aladeweb.com" wrote:
> intenta esto
> para buscar texto:
> grep -n texto_a_buscar *
Y si usas GNU grep, grep -r se mete en los directorios. Es práctico,
para evitarte un find . -type f | xargs grep -r, o algo así.
> para modificar texto
> for i in *
> do
> echo "Modificando texto $i"
> cat $i | sed "s/texto_viejo/texto_nuevo/g" > $i
> done
Eso tiene un problema muy grave: el archivo que está leyendo cat es
sobreescrito por la redirección final incluso antes de arrancar el
proceso, con lo cual terminarás con una serie de archivos corruptos, o
vacíos.
Sugiero reemplazar ese pipeline por:
cat "$i" | sed s/viejo/nuevo/g > "$i.$$" && mv "$i.$$" "$i"
O, alternativamente, botar el script sh por completo y usar sólo sed:
sed -i s/viejo/nuevo/g *
O, si hace falta descender en directorios:
find . -type f | xargs sed -i s/viejo/nuevo/g
(Este último encantamiento tendrá problemas si hay archivos cuyo
nombre contiene espacios, comillas u otros carácteres reservados por
el shell; en tal caso, necesitas usar la opción -exec de find, lo cual
será un poco más lento. Ve los manuales.)
-CR
--
Ceterum censeo: SCO delenda est.
Reply to: